如何在 Guzzle ~6.0 中读取响应有效 URL

2022-08-30 11:07:14

我一直在搜索大约2个小时,我不知道如何阅读最终的响应uri。

在以前版本的PHP Guzzle中,你只需调用即可获得它。$response->getEffectiveUrl()

我希望在新版本中有类似的东西,所以最终的代码看起来像这样:

$response = $httpClient->post('http://service.com/login', [
    'form_params' => [
        'user'   => $user,
        'padss'  => $pass,
    ]
]);

$url = $response->getEffectiveUrl();

但是在最新版本中,现在是一个,并且没有方法允许我检索uri。$responseGuzzleHttp\Psr7\Response

我在这里阅读了有关重定向的信息(http://guzzle.readthedocs.org/en/latest/quickstart.html#redirects),但它没有说明有关

更新:6.1版本现在允许您轻松执行此操作:

https://stackoverflow.com/a/35443523/1811887

谢谢@YauheniPrakopchyk


答案 1

文档中直接吞噬6.1解决方案。

use GuzzleHttp\Client;
use GuzzleHttp\TransferStats;

$client = new Client;

$client->get('http://some.site.com', [
    'query'   => ['get' => 'params'],
    'on_stats' => function (TransferStats $stats) use (&$url) {
        $url = $stats->getEffectiveUri();
    }
])->getBody()->getContents();

echo $url; // http://some.site.com?get=params

答案 2

您可以检查您的请求具有byt设置参数的重定向:track_redirects

$client = new \GuzzleHttp\Client(['allow_redirects' => ['track_redirects' => true]]);

$response = $client->request('GET', 'http://example.com');

var_dump($response->getHeader(\GuzzleHttp\RedirectMiddleware::HISTORY_HEADER));

如果有任何重定向,最后一个应该是您的有效网址,否则您的初始网址。

您可以在此处 http://docs.guzzlephp.org/en/latest/request-options.html#allow-redirects 阅读更多相关信息。allow_redirects


推荐