13

別の PHP API にリクエストを行う PHP Web アプリケーションがあります。Guzzle を使用して http リクエストを作成し、$_COOKIES配列をに渡し$options['cookies']ます。これは、API がフロントエンド アプリケーションと同じ Laravel セッションを使用するためです。最近 Guzzle 6 にアップグレードしましたが、 に渡すことができなくなり$_COOKIESました$options['cookies']( を割り当てる必要があるというエラーが表示されますCookieJar)。私の質問は、ブラウザーに存在する Cookie を Guzzle 6 クライアント インスタンスに渡して、API への要求に含めるにはどうすればよいですか?

4

2 に答える 2

11

次のようなものを試してください:

/**
 * First parameter is for cookie "strictness"
 */
$cookieJar = new \GuzzleHttp\Cookie\CookieJar(true);
/**
  * Read in our cookies. In this case, they are coming from a
  * PSR7 compliant ServerRequestInterface such as Slim3
  */
$cookies = $request->getCookieParams();
/**
  * Now loop through the cookies adding them to the jar
  */
 foreach ($cookies as $cookie) {
           $newCookie =\GuzzleHttp\Cookie\SetCookie::fromString($cookie);
           /**
             * You can also do things such as $newCookie->setSecure(false);
            */
           $cookieJar->setCookie($newCookie);
 }
/**
 * Create a PSR7 guzzle request
 */
$guzzleRequest = new \GuzzleHttp\Psr7\Request(
                   $request->getMethod(), $url, $headers, $body
        );
 /**
  * Now actually prepare Guzzle - here's where we hand over the
  * delicious cookies!
  */
 $client = new \GuzzleHttp\Client(['cookies'=>$cookieJar]);
 /**
  * Now get the response
  */
 $guzzleResponse = $client->send($guzzleRequest, ['timeout' => 5]);

そして、それらを再び取り出す方法は次のとおりです。

$newCookies = $guzzleResponse->getHeader('set-cookie');
于 2015-11-13T20:53:44.310 に答える