У меня есть веб-приложение PHP, которое отправляет запросы к другому PHP API. Я использую Guzzle для выполнения http-запросов, передавая массив $_COOKIES
в $options['cookies']
. Я делаю это, потому что API использует тот же сеанс Laravel, что и внешнее приложение. Недавно я обновился до Guzzle 6 и больше не могу передавать $_COOKIES
в $options['cookies']
(я получаю сообщение об ошибке о необходимости назначить CookieJar
). Мой вопрос: как я могу передать все файлы cookie, которые у меня есть в браузере, моему экземпляру клиента Guzzle 6, чтобы они были включены в запрос к моему API?
Передача файлов cookie из браузера в клиент Guzzle 6
Ответы (2)
Попробуйте что-то вроде:
/**
* 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');
person
Richy B.
schedule
13.11.2015
Я думаю, теперь вы можете упростить это с помощью CookieJar::fromArray
:
use GuzzleHttp\Cookie\CookieJar;
use GuzzleHttp\Client;
// grab the cookies from the existing user's session and create a CookieJar instance
$cookies = CookieJar::fromArray([
'key' => $_COOKIE['value']
], 'your-domain.com');
// create your new Guzzle client that includes said cookies
$client = new Client(['cookies' => $jar]);
person
Dylan Pierce
schedule
22.10.2018
Я думаю, что параметр cookie является логическим значением, а не ссылкой на файл
$jar
. Почему документация настолько расплывчата для этого предмета cookie?
- person hbogert; 09.01.2019