使用Guzzle发送多个请求时出现致命错误?

时间:2015-04-08 01:38:14

标签: php guzzle

这是我得到的错误

Argument 1 passed to GuzzleHttp\Client::send() must implement interface GuzzleHttp\Message\RequestInterface, array given,

这是我正在使用的代码

$guzzleResponses = $client->send(array(
$client->get('http://www.sitepoint.com/'),
$client->get('http://www.sitepoint.com/'),
$client->get('http://www.sitepoint.com/')
));

foreach($guzzleResponses as $guzzleResponse) {
$goutteObject = new Symfony\Component\BrowserKit\Response(
       $guzzleResponse->getBody(true), 
       $guzzleResponse->getStatusCode(), 
       $guzzleResponse->getHeaders()
);
}

我理解错误意味着我在预期其他东西的时候传递一个数组。但我想同时处理多个请求而无法以其他方式思考?

2 个答案:

答案 0 :(得分:3)

这个问题已经(由你自己)提出并回答here。要异步发送多个请求,您必须使用GuzzleHttp\Pool

您对GuzzleHttp\Client->send()的来电不正确。您实际上正在为它提供一个ResponseInterfaces数组(不是预期的)。 GuzzleHttp\Client->get()将在内部调用$this->sent($this->createRequest('GET', $url, $options)),这意味着它将实际执行http请求并返回GuzzleHttp\Message\ResponseInterface的实例。

答案 1 :(得分:1)

根据同样需要的其他几个问题,here提供了新的Guzzlehttp包 guzzlehttp / guzzle 的答案。请点击链接查看完整说明或查看以下示例

请参阅示例此处

    $newClient = new  \GuzzleHttp\Client(['base_uri' => $base]);
    foreach($documents->documents as $doc){

        $params = [
            'language' =>'eng',
            'text' => $doc->summary,
            'apikey' => $key
        ];

        $requestArr[$doc->reference] = $newClient->getAsync( '/1/api/sync/analyze/v1?' . http_build_query( $params) );
    }

    $responses = \GuzzleHttp\Promise\unwrap($requestArr); //$newClient->send( $requestArr );