2017-07-31 14 views
5

私はAPIサイトにログインするためにGuzzleを使用していますが、正しい資格情報を使ってログインした時点でRefreshTokenを使ってCookieを取得し、次回の呼び出しで送信します。ここでは簡単なコードです:私は、次の呼び出しでこのクッキーを使用する必要があり、今GuzzleHttp:POST応答からクッキーを保存し、次のPOSTに使用するにはどうすればよいですか?

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

を、私は知っている:

$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'), 
      ] 
     ]); 

と私はクッキーと右の応答を取り戻すには、私が使用してクッキーを見ることができますGuzzleは私のためにクッキーを保存し、 "CookieJar"または "SessionCookieJar"を使って自動的に(またはそうでない)次の呼び出しでそれを送信することができます。私はそれを使用しようとしましたが、 E「jarファイル」内のクッキーは、ここで私がやっていることです:

$cookieJar = new SessionCookieJar('SESSION_STORAGE', true); 

     $client = new Client([ 
      'cookies' => $cookieJar 
     ]); 

     $response = $client->request .... 

しかし、私は戻ってPOSTからクッキーを取得するとき、私は使用してそれを見ることができます。

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

それはcookieJarにはないので、次の呼び出しでそれを送信しません。 私はここで何が欠けていますか?

ありがとうございました! ['cookies' => $jar]は、クライアントのリクエスト/レスポンスで使用する特定クッキージャー($jar)の使用を示しながらドキュメントhere['cookies' => true]あたりとして

+0

http://docs.guzzlephp.org/en/stable/quickstart.html#cookies。あなたは、ログインリクエストのjarを設定して、クッキーを収集する必要があります。 – Phil

+0

あなたの答えをありがとう、私はリクエストでそれを設定しようとしましたが、新しいクライアントinitでは何も動作しません。 )、いくつかのコードを追加してください。 –

答えて

1

は、すべての要求のための共有クッキージャーの使用を示します。だから、どちらかを使用する必要があります:

$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'); 

または

$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'); 
+0

ありがとう、ありがとう、私はそれを考え出した:) – EranLevi

関連する問題