2015-08-07 2 views
6

У меня есть PHP webapp, который делает запросы к другому API PHP. Я использую Guzzle для получения http-запросов, передавая массив $_COOKIES в $options['cookies']. Я делаю это, потому что API использует тот же сеанс Laravel, что и внешнее приложение. Недавно я обновился до Guzzle 6, и я больше не могу пройти $_COOKIES до $options['cookies'] (появляется сообщение о необходимости присвоить CookieJar). Мой вопрос в том, как я могу передать все файлы cookie, которые я присутствую в браузере, на мой экземпляр клиента Guzzle 6, чтобы они были включены в запрос к моему API?Передача файлов cookie из браузера на клиент Guzzle 6

ответ

5

Попробуйте что-то вроде:

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

Надеется, что это помогает!

Смежные вопросы