在php中同时发送多个http请求

时间:2018-01-08 09:19:34

标签: php curl guzzle6

我正在尝试从给定的网址获取网页meta tagsdescription。 我有url数组,我必须循环发送curl get request并获取每个页面meta,这需要花费大量时间来处理。

  

有没有办法同时处理所有网址?

我的意思是同时向所有网址发送请求,然后接收 请求分别完成后立即回复。 为此,我使用了

  

curl_multi_init()

但它没有按预期工作。我用过这个例子 Simultaneuos HTTP requests in PHP with cURL

我还使用了GuzzleHttp示例 Concurrent HTTP requests without opening too many connections

我的代码

$urlData  = [
      'http://youtube.com',      
      'http://dailymotion.com',      
      'http://php.net'     
      ];
foreach ($urlData as $url) {
      $promises[] = $this->client->requestAsync('GET', $url);
}

Promise\all($promises)->then(function (array $responses) {
   foreach ($responses as $response) {
          $htmlData = $response->getBody();
          dump($profile);
   }
})->wait();

但是我收到了这个错误

  

调用未定义的函数GuzzleHttp \ Promise \ Promise \ all()

我正在使用Guzzle 6Promises 1.3

我需要一个解决方案,无论是curl还是guzzle,都可以同时发送请求以节省时间。

1 个答案:

答案 0 :(得分:0)

检查您的use声明。你可能有一个错误,因为正确的名称是GuzzleHttp\Promise\all()。也许你忘了use GuzzleHttp\Promise as Promise

否则代码是正确的,应该可行。还要检查您是否在PHP中启用了cURL扩展名,因此Guzzle会将其用作后端。它可能已经存在,但值得检查;)