2015-08-07 17 views
6

Ho una webapp PHP che effettua richieste ad un'altra API PHP. Uso Guzzle per effettuare le richieste http, passando l'array $_COOKIES a $options['cookies']. Lo faccio perché l'API usa la stessa sessione di Laravel come applicazione di frontend. Recentemente ho aggiornato a Guzzle 6 e non posso più passare $_COOKIES allo $options['cookies'] (ricevo un errore relativo alla necessità di assegnare uno CookieJar). La mia domanda è: come posso consegnare i cookie che ho presente nel browser all'istanza del mio client Guzzle 6 in modo che siano inclusi nella richiesta alla mia API?Trasferimento di cookie dal browser al client Guzzle 6

risposta

5

Prova qualcosa di simile:

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

ed ecco come farli di nuovo:

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

Speranza che aiuta!

Problemi correlati