如何发送带有 Guzzlehttp/guzzle 6 的 Cookie?

How can I send Cookies with Guzzlehttp/guzzle 6?

我需要发送带有自定义 cookie 的请求。

我试过这样设置 cookieJar:

$cookieJar = CookieJar::fromArray(array($cookieName=>$cookieStr),
                    'api.mobra.in');

                $res = $this->guzzleClient->request($requestMethod, $url,
                    [
                        'cookies' => [$cookieJar]
                    ]
                );

但是出现错误

cookies must be an instance of GuzzleHttp\Cookie\CookieJarInterface

请建议示例或详细解释。 我看过文件,但他们没有详细提到。

谢谢!

use GuzzleHttp\Cookie\CookieJar;

$cookieJar = CookieJar::fromArray([
    'cookie_name' => 'cookie_value'
], 'example.com');

$client->request('GET', '/get', ['cookies' => $cookieJar]);

您可以阅读文档 here

如果使用 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

另一种使用 Guzzle 向请求添加 cookie 的方法:

$url = 'https://www.example.com';
$request_options = [
  'headers' => ['Cookie' => 'COOKIE_NAME=VALUE']
];
$response = $this->httpClient->request('GET', $url, $request_options);

对于 在 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);