curl_multi_exec有时会返回空白

时间:2013-12-22 17:01:47

标签: php curl

基本上我有几百个子页面(我作为测试运行),然后我必须解析这几百个子页面中的每一个以获取一些数据。现在这一切都很好用。但是,当然,它需要太长时间,因为有很多页面,如果我这样做是连续的。所以我使用了curl_multi_exec,但现在我遇到了其中一些页面将返回空白的问题。哪些页面是空白的是非常随机的,所以我假设它与Web服务器决定不响应,因为我一次向200个请求发送垃圾邮件。有没有办法既可以一次限制请求数量,也可以在请求没有正确返回时重新处理请求,或以其他方式处理此问题?

现有卷曲代码:

function multiple_html_requests($nodes){
    $mh = curl_multi_init();
    $curl_array = array();
    foreach ($nodes as $i=>$url){
        $curl_array[$i] = curl_init($url);
        curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true);
        curl_multi_add_handle($mh, $curl_array[$i]);
    }
    $running = NULL;
    do{
      usleep(10000);
      curl_multi_exec($mh, $running);
    } while($running > 0);

    $res = array();
    foreach($nodes as $i=>$url){
        $res[$url] = curl_multi_getcontent($curl_array[$i]);
    }

    foreach($nodes as $i=>$url){
        curl_multi_remove_handle($mh, $curl_array[$i]);
    }
    curl_multi_close($mh);
    return $res;
}

1 个答案:

答案 0 :(得分:0)

您可以使用此课程:

https://github.com/petewarden/ParallelCurl

是多层卷曲多层并支持设置最大线程数