1

可能重复:
cURL 多同时请求(域检查)

我正在尝试检查网站是否存在。(如果它响应就足够了)问题是我的域数组是 20,000,我正试图尽可能加快这个过程。

我做了一些研究,发现这个页面详细介绍了同时的 cURL 请求 - > http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/

我还发现这个页面似乎是检查域网页是否启动的好方法-> http://www.wrichards.com/blog/2009/05/php-check-if-a-url-exists-with -卷曲/

关于如何快速检查 20,000 个域以查看它们是否已启动的任何想法?

4

4 回答 4

2
$http = curl_init($url);
$result = curl_exec($http);
$http_status = curl_getinfo($http, CURLINFO_HTTP_CODE);
curl_close($http);
if($http_status == 200) // good here
于 2012-09-22T20:44:27.093 回答
1

看看RollingCurl

它允许您执行多个 curl 请求。这是一个例子:

    require 'curl/RollingCurl.php';
    require 'curl/RollingCurlGroup.php';


    $rc = new RollingCurl('handle_response');
            $rc->window_size = 2;




            foreach($domain_array as $domain => $value)
            {






                 $request = new RollingCurlRequest($value);

                // echo $temp . "\n";


                    $rc->add($request);




            }

            $rc->execute();




    function handle_response($response, $info)
    {

            if($info['http_code'] === 200)
            {
                // site exists handle response data
            }

    }
于 2012-09-22T20:52:58.250 回答
1

我认为,如果您真的想加快进程并节省大量带宽(我让您计划定期检查可用性),那么您应该使用套接字,而不是 curl。您可以一次打开多个套接字并安排每个套接字的“异步”处理。那么你需要发送的不是“GET $sitename/ HTTP/1.0\r\n\r\n”请求,而是“HEAD $sitename/ HTTP/1.0\r\n\r\n”。它将返回与 GET 请求返回的状态代码相同的状态代码,但没有响应正文。您只需要解析第一行响应即可获得答案,因此您只需使用良好的响应代码对其进行 regex_match 即可。作为一项额外的优化,最终您的代码将了解哪些站点位于相同的 IP 上,因此您可以缓存名称映射并按 IP 对列表进行排序。

于 2012-09-22T21:01:31.603 回答
0

您可以使用多个 curl 请求,但您可能希望一次将它们限制为 10 个左右。您必须在单独的数据库中跟踪作业以处理队列:PHP 中的线程

于 2012-09-22T20:49:21.150 回答