php – GuzzleHttp:如何从POST响应中保存cookie并在下一次POST中使用它?

前端之家收集整理的这篇文章主要介绍了php – GuzzleHttp:如何从POST响应中保存cookie并在下一次POST中使用它?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Guzzle登录我的API站点,并且在我使用正确的凭据登录的那一刻,我得到一个带有RefreshToken的cookie,以便在下次调用时发送它,这是我的简单(并且运行良好)代码
  1. $client = new Client(array(
  2. 'cookies' => true
  3. ));
  4.  
  5.  
  6. $response = $client->request('POST','http://myapi.com/login',[
  7. 'timeout' => 30,'form_params' => [
  8. 'email' => $request->get('email'),'password' => $request->get('password'),]
  9. ]);

我用cookie回复了正确的回复,我可以通过以下方式看到cookie:

  1. $newCookies = $response->getHeader('set-cookie');

现在,我需要在接下来的调用中使用这个cookie,我知道Guzzle可以为我保存cookie并使用“CookieJar”或“SessionCookieJar”在下次调用自动发送(或不发送),我试过使用但是我没有在’jar’中看到cookie,这就是我所做的:

  1. $cookieJar = new SessionCookieJar('SESSION_STORAGE',true);
  2.  
  3. $client = new Client([
  4. 'cookies' => $cookieJar
  5. ]);
  6.  
  7. $response = $client->request ....

但是,当我从POST中获取cookie时,我只能通过以下方式看到它:

  1. $newCookies = $response->getHeader('set-cookie');

它不在cookieJar中,因此它不会在下次调用时发送它.
我在这里错过了什么?

谢谢!

根据文档 here,[‘cookies’=> true]表示对所有请求使用共享cookie jar,而[‘cookies’=> $jar]表示使用特定的cookie jar($jar)与客户的请求/响应一起使用.所以你需要使用:
  1. $client = new Client(array(
  2. 'cookies' => true
  3. ));
  4.  
  5.  
  6. $response = $client->request('POST',[
  7. 'timeout' => 30,'form_params' => [
  8. 'email' => $request->get('email'),]
  9. ]);
  10.  
  11. // and using the same client
  12.  
  13. $response = $client->request('GET','http://myapi.com/next-url');
  14.  
  15. // or elsewhere ...
  16.  
  17. $client = new Client(array(
  18. 'cookies' => true
  19. ));
  20.  
  21. $response = $client->request('GET','http://myapi.com/next-url');

要么

  1. $jar = new CookieJar;
  2.  
  3. $client = new Client(array(
  4. 'cookies' => $jar
  5. ));
  6.  
  7.  
  8. $response = $client->request('POST','http://myapi.com/next-url');
  9.  
  10. // or elsewhere ...
  11.  
  12. $client = new Client(array(
  13. 'cookies' => $jar // the same $jar as above
  14. ));
  15.  
  16. $response = $client->request('GET','http://myapi.com/another-url');

猜你在找的PHP相关文章