如何使用 Guzzlehttp/guzzle 6 发送 Cookie?
Posted
技术标签:
【中文标题】如何使用 Guzzlehttp/guzzle 6 发送 Cookie?【英文标题】:How can I send Cookies with Guzzlehttp/guzzle 6? 【发布时间】:2017-04-21 06:53:04 【问题描述】:我需要发送带有自定义 cookie 的请求。
我尝试过这样设置 cookieJar:
$cookieJar = CookieJar::fromArray(array($cookieName=>$cookieStr),
'api.mobra.in');
$res = $this->guzzleClient->request($requestMethod, $url,
[
'cookies' => [$cookieJar]
]
);
但它得到一个错误
cookies 必须是 GuzzleHttp\Cookie\CookieJarInterface 的实例
请提供示例或详细说明。 我浏览了文件,但他们没有详细提及。
谢谢!
【问题讨论】:
我试过 GuzzleHttp\Cookie\SetCookie。也许是错的。 【参考方案1】:use GuzzleHttp\Cookie\CookieJar;
$cookieJar = CookieJar::fromArray([
'cookie_name' => 'cookie_value'
], 'example.com');
$client->request('GET', '/get', ['cookies' => $cookieJar]);
您可以阅读文档here。
【讨论】:
注意:cookie jar 的域必须与您请求的域匹配。 我正在从里到外阅读那部分文档,我找不到设置 cookie 的方法,它只提到了误导性的“cookie jar interface”....看起来像你的建议的文章。你可以把它的截图发给我们,因为我可以把它从来没有提到过的“cookies”部分的截图发给我们,否则我就不用谷歌了。 guzzle 最好的文档是源代码。 我尝试过使用 cookieJar,但出现 cookie 之类的错误必须是 GuzzleHttp\Cookie\CookieJarInterface 的实例【参考方案2】:使用 Guzzle 向请求添加 cookie 的另一种方法:
$url = 'https://www.example.com';
$request_options = [
'headers' => ['Cookie' => 'COOKIE_NAME=VALUE']
];
$response = $this->httpClient->request('GET', $url, $request_options);
【讨论】:
感谢这与饼干罐相比对我有用。【参考方案3】: 如果使用 cookie 请求选项得到指示,Guzzle 可以为您维护 cookie 会话。发送请求时,cookie 选项必须设置为 GuzzleHttp\Cookie\CookieJarInterface
的实例。
// Use a specific cookie jar
$jar = new \GuzzleHttp\Cookie\CookieJar;
$r = $client->request('GET', 'http://httpbin.org/cookies', [
'cookies' => $jar
]);
如果您想对所有请求使用共享 cookie jar,可以在客户端构造函数中将 cookie 设置为 true。
// Use a shared client cookie jar
$client = new \GuzzleHttp\Client(['cookies' => true]);
$r = $client->request('GET', 'http://httpbin.org/cookies');
检查完整的quickstart。
【讨论】:
是的,那部分文档没有说明如何设置自定义 cookie。【参考方案4】:对于在 laravel 中使用 Guzzle Http 发送 cookie,您可以使用以下示例代码:
//your address
$address = "http://example.com/xyz";
//your cookie
$coockie = ['Cookie' => "Key=Value"];
//your request
$res = Http::withOptions([
'headers' => $coockie
])->get($address);
【讨论】:
以上是关于如何使用 Guzzlehttp/guzzle 6 发送 Cookie?的主要内容,如果未能解决你的问题,请参考以下文章
安装 guzzlehttp/guzzle 时出现内存不足和未配置交换的问题