我正在尝试从给定的网址获取网页meta tags
和description
。
我有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 6
和Promises 1.3
我需要一个解决方案,无论是curl
还是guzzle
,都可以同时发送请求以节省时间。
答案 0 :(得分:0)
检查您的use
声明。你可能有一个错误,因为正确的名称是GuzzleHttp\Promise\all()
。也许你忘了use GuzzleHttp\Promise as Promise
。
否则代码是正确的,应该可行。还要检查您是否在PHP中启用了cURL
扩展名,因此Guzzle会将其用作后端。它可能已经存在,但值得检查;)