GuzzleHttp:how can I save cookies from a POST response and use it in the next POST?
As per the the documentation here, ['cookies' => true]
indicates the use of a shared cookie jar for all requests, while ['cookies' => $jar]
indicated the use of a specific cookie jar ($jar
) for use with client's requests/ responses. So you would need to use either:
$client = new Client(array(
'cookies' => true
));
$response = $client->request('POST', 'http://myapi.com/login', [
'timeout' => 30,
'form_params' => [
'email' => $request->get('email'),
'password' => $request->get('password'),
]
]);
// and using the same client
$response = $client->request('GET', 'http://myapi.com/next-url');
// or elsewhere ...
$client = new Client(array(
'cookies' => true
));
$response = $client->request('GET', 'http://myapi.com/next-url');
or
$jar = new CookieJar;
$client = new Client(array(
'cookies' => $jar
));
$response = $client->request('POST', 'http://myapi.com/login', [
'timeout' => 30,
'form_params' => [
'email' => $request->get('email'),
'password' => $request->get('password'),
]
]);
// and using the same client
$response = $client->request('GET', 'http://myapi.com/next-url');
// or elsewhere ...
$client = new Client(array(
'cookies' => $jar // the same $jar as above
));
$response = $client->request('GET', 'http://myapi.com/another-url');
Eran Levi
Updated on June 12, 2022Comments
-
Eran Levi almost 2 years
I'm using Guzzle to login my API site, and in the moment Im login with the right credentials, I get back a cookie with a RefreshToken to send it in the next call, here is my simple (and working well) code:
$client = new Client(array( 'cookies' => true )); $response = $client->request('POST', 'http://myapi.com/login', [ 'timeout' => 30, 'form_params' => [ 'email' => $request->get('email'), 'password' => $request->get('password'), ] ]);
and I get back the right response with a cookie, I can see the cookie by using:
$newCookies = $response->getHeader('set-cookie');
now, I need to use this cookie in the next calls, and I know Guzzle can save the cookie for me and send it automatically (or not) in the next call using a "CookieJar" or "SessionCookieJar", I have tried to use it but I do not see the cookie in the 'jar', here is what I have done:
$cookieJar = new SessionCookieJar('SESSION_STORAGE', true); $client = new Client([ 'cookies' => $cookieJar ]); $response = $client->request ....
but, when I get the cookie back from the POST, I can see it only by using:
$newCookies = $response->getHeader('set-cookie');
and its not in the cookieJar, so it won't send it in the next call.. what am I missing here?
Thank you!
-
Simas Joneliunas about 2 yearsHi and thanks for the answer. It would be great if you could explain what your code does. It would help the community much more that way to learn from you!