如何使用Guzzlehttp/guzzle 6发送Cookies?

36

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

我已经尝试像这样设置cookieJar:

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

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

但是它出现了错误

cookies必须是GuzzleHttp\Cookie\CookieJarInterface的实例。

请提供示例或详细说明。我查看了文档,但他们没有详细说明。

谢谢!


1
我尝试了 GuzzleHttp\Cookie\SetCookie。或许是错误的。 - steve
4个回答

61
use GuzzleHttp\Cookie\CookieJar;

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

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

你可以在这里阅读文档。


4
注意:Cookie jar的域名必须与您请求的域名匹配。 - Andy Fleming
4
我正在反复仔细阅读那部分文档,但却找不到设置cookie的方法,只有一些误导性的“cookie jar interface”内容……没有任何像你建议的那部分文章。如果有需要,你可以向我们发送截图,因为我在“cookies”部分没有看到任何相关信息,否则我就不必去谷歌了。 - Frederick G. Sandalo
4
使用 Guzzle 最好的文档是源代码。 - Federkun
我尝试使用cookieJar,但是出现了错误,如下所示: cookies必须是GuzzleHttp\Cookie\CookieJarInterface的实例。 - JayminLimbachiya

7

用 Guzzle 添加 cookie 的另一种方式:

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

1
谢谢,与 cookie jar 相比,这对我很有效。 - Binny K Thomas

2

Guzzle可以通过使用cookies请求选项来为您维护cookie会话。在发送请求时,必须将cookies选项设置为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,可以在客户端构造函数中将 cookies 设置为 true。

// Use a shared client cookie jar
$client = new \GuzzleHttp\Client(['cookies' => true]);
$r = $client->request('GET', 'http://httpbin.org/cookies');

请查看完整的快速入门指南


2
是的,文档的那一部分没有提到如何设置自定义 cookie。 - Mykytak

2

若要使用Guzzle Http在Laravel中发送cookie,您可以使用以下示例代码:

        //your address
        $address = "http://example.com/xyz";
        
        //your cookie
        $coockie = ['Cookie' => "Key=Value"];
        
        //your request
        $res = Http::withOptions([
            'headers' => $coockie
        ])->get($address);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接