繁体   English   中英

PHP多卷曲问题

[英]php multi curl problem

我想通过curl_exec获得几页,第一页正常,但是其他所有curl_exec 302 header ,什么原因?

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, ROOT_URL);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($curl); // here good content
curl_close($curl);

preg_match_all('/href="(\/users\/[^"]+)"[^>]+>\s*/i', $content, $p);

for ($j=0; $j<count($p[1]); $j++){
    $new_curl = curl_init();
    curl_setopt($new_curl, CURLOPT_URL, NEW_URL.$p[1][$j]);
    curl_setopt($new_curl, CURLOPT_RETURNTRANSFER, 0);
    $content = curl_exec($new_curl); // here 302    
    curl_close($new_curl);

preg_match('/[^@]+@[^"]+/i', $content, $p2);

}

像这样

您可能想要提供代码示例,以便我们查看是否省略了某些内容。

302响应代码通常表示服务器将您重定向到其他位置(在“ Location响应标头中找到)。 根据您使用的标记,CURL可以自动检索该标记,也可以监视302响应并自行检索。

这是使CURL遵循重定向的方式(其中$ ch是curl连接的句柄):

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects 

您可以使用curl multi,它可以更快并且可以并行从所有url获取数据。 你可以这样使用

//Initialize
$curlOptions = array(CURLOPT_RETURNTRANSFER => 1);//Add whatever u additionally want.
$curlHandl1 = curl_init($url1);
curl_setopt_array($curlHandl1, $curlOptions);

$curlHandl2 = curl_init($url2);
curl_setopt_array($curlHandl2, $curlOptions);

$multi = curl_multi_init();
curl_multi_add_handle($multi, $curlHandle1);
curl_multi_add_handle($multi, $curlHandle2);

//Run Handles
$running = null;
do {
  $status = curl_multi_exec($mh, $running);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($running && $status == CURLM_OK) {
  if (curl_multi_select($mh) != -1) {
    do {
      $status = curl_multi_exec($mh, $running);
    } while ($status == CURLM_CALL_MULTI_PERFORM);
  }
}

//Retrieve Results
$response1 = curl_multi_getcontent($curlHandle1);
$status1 = curl_getinfo($curlHandle1);

$response1 = curl_multi_getcontent($curlHandle1);
$status1 = curl_getinfo($curlHandle1);

您可以在这里找到更多信息http://www.php.net/manual/en/function.curl-multi-exec.php查看Example1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM