执行大量http请求(HEAD)的最快方法是什么?

时间:2013-02-04 22:10:40

标签: php http batch-file

  

可能重复:
  Asynchronous HTTP requests in PHP

我有一个使用foreach循环的脚本,并从文件中获取一个项目ID,如果状态为200,则检查头部请求。此脚本运行需要很长时间,所以有什么办法吗?我可以一次做多个请求吗?我知道用ajax如果我用$ .ajax()做一个for循环,它会立刻启动它们。如何使用php获取此行为或是否有允许批处理的替代方法?

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:0)

单个请求很容易(就像你注意到的那样)。 Justloop through并使用Pear库HTTP_Request2并发出HEAD请求:

  $request = new HTTP_Request2('http://www.your_url.com/',
                         HTTP_Request2::METHOD_HEAD);
  $response = $request->send();
  if (200 == $response->getStatus()) {
    echo "Yippie... a 200";
  } 

你也可以使用php curl库,但它更适合处理:Header only retrieval in php via curl

但是,要在soley PHP中并行执行此操作,您需要使用类似exec()的东西来分叉其他PHP脚本,因为PHP本身不支持线程编程或并发。同样,您也可以使用某种类型的自定义作业/工作队列使用gearman或其他东西,但这非常复杂。

答案 2 :(得分:0)

小心!如果您知道这需要花费很多时间,那么您可能需要大约数百或数千个URL。一定不要压倒目标服务器。

另请注意,根据目标上运行的代码,HEAD请求需要完成的工作量可能与GET请求完全相同。因此,唯一的优化是不将数据传输给您。这可能被误认为是拒绝服务攻击。