2

guzzleの上にgoutteが構築されていることは知っています。これは、guzzle を使用した同時 HTTP リクエストのサンプルです。

<?php
$client->send(array(
    $client->get('http://www.example.com/foo'),
    $client->get('http://www.example.com/baz'),
    $client->get('http://www.example.com/bar')
));

同時リクエストは goutte でも実行できますか?

4

1 に答える 1

3

Goutte のコードをざっと見てみると、複数のリクエストをサポートしていないことがわかります。

ただし、必要に応じて、Guzzle リクエストを収集し、新しいSymfony\Component\BrowserKit\Responseオブジェクトを作成することで Goutte を模倣できます。これは、Goutte がユーザーと対話するために返すものです。

詳細については、createResponse() 関数(残念ながら保護されています) を確認してください。

<?php

// Guzzle returns an array of Responses.
$guzzleResponses = $client->send(array(
    $client->get('http://www.example.com/foo'),
    $client->get('http://www.example.com/baz'),
    $client->get('http://www.example.com/bar')
));

// Iterate through all of the guzzle responses.
foreach($guzzleResponses as $guzzleResponse) {
    $goutteObject = new Symfony\Component\BrowserKit\Response(
           $guzzleResponse->getBody(true), 
           $guzzleResponse->getStatusCode(), 
           $guzzleResponse->getHeaders()
    );

    // Do things with $goutteObject as you normally would.
}

$guzzleResponsesで応答が収集されるのを待つ場合、すべての非同期が完了するまで待機することに注意してください。すぐに応答したい場合は、非同期リクエストの処理に関する Guzzle のドキュメントを確認してください。

于 2014-06-30T21:35:46.167 に答える