2015-08-07 7 views
6

Ich habe eine PHP-Webanwendung, die Anfragen an eine andere PHP-API stellt. Ich benutze Guzzle, um die HTTP-Anfragen zu machen, indem ich das $_COOKIES Array an $options['cookies'] übergebe. Ich mache das, weil die API die gleiche Laravel-Sitzung wie die Frontend-Anwendung verwendet. Ich habe vor kurzem zu Guzzle 6 aufgerüstet und ich kann nicht mehr $_COOKIES an die $options['cookies'] übergeben (Ich bekomme einen Fehler über die Notwendigkeit, eine CookieJar zuweisen). Meine Frage ist, wie kann ich die im Browser vorhandenen Cookies an meine Guzzle 6-Client-Instanz übergeben, damit sie in die Anfrage an meine API aufgenommen werden?Weitergabe von Cookies vom Browser zu Guzzle 6 Client

Antwort

5

Versuchen Sie so etwas wie:

/** 
* 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]); 

und hier ist, wie sie wieder raus:

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

Hoffe, es hilft!

Verwandte Themen