Setting up cookies for Guzzle CookieJar



我正在用PHP对一个需要身份验证的站点进行单元测试。身份验证是基于cookie的,所以我需要能够在cookiejar中放置这样的cookie:

[ 'user_token' => '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae' ] 

然后,Web 应用程序可以将此已知良好的令牌用于测试数据,并且能够在测试条件下进行身份验证以与数据夹具进行交互。

此外,它必须是一个安全的cookie,我(显然(需要设置域。

问题是:我不知道如何制作和设置这个饼干并将其粘在罐子里。你是怎么做到的?

源代码提供了我需要的答案。

CookieJar 类提供了一种从关联数组构建 cookie 的方法。例:

$domain = 'example.org';
$values = ['users_token' => '2c26b46b68ffc68ff99b453c1d30113413422d706483bfa0f98a5e886266e7ae'];
$cookieJar = GuzzleHttpCookieCookieJar::fromArray($values, $domain);
$client = new GuzzleHttpClient([
    'base_uri' => 'https://example.org',
    'cookies'  => $cookieJar 
]);

简单的例子。 此代码将 cookie 保存在文件中,并在下次执行脚本时将其加载回

use GuzzleHttpClient;
use GuzzleHttpCookieFileCookieJar;
// file to store cookie data
$cookieFile = 'cookie_jar.txt';
$cookieJar = new FileCookieJar($cookieFile, TRUE);
$client = new Client([ 
  'base_uri' => 'http://example.com',
  // specify the cookie jar
  'cookies' => $cookieJar
]);
// guzzle/cookie.php, a page that returns cookies.
$response = $client->request('GET', 'simple-page.php');

会话 Cookie 不会自动存储。存储 php 会话 cookie 我们必须将第二个参数设置为 TRUE。

$cookieJar = new FileCookieJar($cookieFile, TRUE);

参考

http://www.ryanwright.me/cookbook/guzzle/cookie

我正在寻找一种解决方案,我需要一种方法来收集重定向上的 cookie,同时从我自己的一组具有多域支持的 cookie 开始。


$cookies = [
   [
      'Name' => 'users_token', 
      'Value' => '2c26b46b68ffc68ff99b453c1d30113413422d706483bfa0f98a', 
      'Domain' => 'domain.com'
   ],
   [
      'Name' => 'session_id', 
      'Value' => '8ff99b453c1d3011341342', 
      'Domain' => 'domain.com'
   ],
   [
      'Name' => 'session_id', 
      'Value' => '8ff99b453c1d3011341342', 
      'Domain' => 'domain.us'
   ],
];
$jar = new GuzzleHttpCookieCookieJar(false, $cookies);
$client = new GuzzleHttpClient([
    'base_uri' => 'https://example.org',
    'cookies'  => $jar 
]);

我没有找到它的文档,我已经找到了构造函数的可选参数并决定试一试。不确定这是否是一种好的做法,但它对我的情况有效。

使用 Guzzle 7.4