GuzzleHttp:how can I save cookies from a POST response and use it in the next POST?

12,641

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');
Share:
12,641
Eran Levi
Author by

Eran Levi

Updated on June 12, 2022

Comments

  • Eran Levi
    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
    Simas Joneliunas about 2 years
    Hi 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!