5

Goutte から Guzzle Response オブジェクトにアクセスしようとしています。そのオブジェクトには、私が使いたい素敵なメソッドがあるからです。たとえば、getEffectiveUrl です。

私が見る限り、コードをハッキングせずにそれを行う方法はありません。

または、応答オブジェクトにアクセスせずに、最後にリダイレクトされた URL を goutte から取得する方法はありますか?

4

1 に答える 1

12

少し遅れましたが:

最後にリダイレクトされた URL を取得することのみに関心がある場合は、次のように簡単に実行できます。

$client = new Goutte\Client();
$crawler = $client->request('GET', 'http://www.example.com');
$url = $client->getHistory()->current()->getUri();

編集:

しかし、ニーズに応えるために Goutte を拡張するのはかなり簡単です。必要なのは createResponse() メソッドをオーバーライドして GuzzleResponse を保存することだけです

namespace Your\Name\Space;

class Client extends \Goutte\Client
{
    protected $guzzleResponse;

    protected function createResponse(\Guzzle\Http\Message\Response $response)
    {
        $this->guzzleResponse = $response;

        return parent::createResponse($response);
    }

    /**
     * @return \Guzzle\Http\Message\Response
     */
    public function getGuzzleResponse()
    {
        return $this->guzzleResponse;
    }
}

その後、必要に応じて応答オブジェクトにアクセスできます

$client = new Your\Name\Space\Client();
$crawler = $client->request('GET', 'http://localhost/redirect');
$response = $client->getGuzzleResponse();

echo $response->getEffectiveUrl();
于 2014-03-05T12:13:23.927 に答える