I've been searching for about 2 hours and I can't figure it out how to read the final response uri.
In previous versions of PHP Guzzle you just call $response->getEffectiveUrl()
and you get it.
I expected to have something similar in the new version so the final code looks like this:
$response = $httpClient->post('http://service.com/login', [ 'form_params' => [ 'user' => $user, 'padss' => $pass, ] ]); $url = $response->getEffectiveUrl();
But in the latest version $response
is now a GuzzleHttp\Psr7\Response
and there is no method which allow me to retrieve the uri.
I read about the redirects here (http://guzzle.readthedocs.org/en/latest/quickstart.html#redirects) but it says nothing about
https://stackoverflow.com/a/35443523/1811887
Thanks @YauheniPrakopchyk
You can check to see if a request or response has a body using the getBody() method: $response = GuzzleHttp\get('http://httpbin.org/get'); if ($response->getBody()) { echo $response->getBody(); // JSON string: { ... } }
Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services. Simple interface for building query strings, POST requests, streaming large uploads, streaming large downloads, using HTTP cookies, uploading JSON data, etc...
For setting default headers to a Guzzle client (if using the client as a base for multiple requests), its best to set up a middleware which would add the header on every request. Otherwise additional request headers will get overridden in new client requests.
Guzzle has historically only utilized cURL to send HTTP requests. cURL is an amazing HTTP client (arguably the best), and Guzzle will continue to use it by default when it is available. It is rare, but some developers don't have cURL installed on their systems or run into version specific issues.
Guzzle 6.1 solution right from the docs.
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
You can check what redirects your request had byt setting track_redirects
parameter:
$client = new \GuzzleHttp\Client(['allow_redirects' => ['track_redirects' => true]]); $response = $client->request('GET', 'http://example.com'); var_dump($response->getHeader(\GuzzleHttp\RedirectMiddleware::HISTORY_HEADER));
If there were any redirects last one should be your effective url otherewise your initial url.
You can read more about allow_redirects
here http://docs.guzzlephp.org/en/latest/request-options.html#allow-redirects.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With