为Guzzle CookieJar设置cookie

时间:2017-02-05 21:07:23

标签: php cookies guzzle

我正在PHP中为需要身份验证的网站进行单元测试。身份验证是基于cookie的,所以我需要能够在cookie jar中放置这样的cookie:

[ 'user_token' => '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae' ] 

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

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

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

2 个答案:

答案 0 :(得分:10)

The source code提供了我需要的答案。

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

$domain = 'example.org';
$values = ['users_token' => '2c26b46b68ffc68ff99b453c1d30113413422d706483bfa0f98a5e886266e7ae'];

$cookieJar = \GuzzleHttp\Cookie\CookieJar::fromArray($values, $domain);

$client = new \GuzzleHttp\Client([
    'base_uri' => 'https://example.org',
    'cookies'  => $cookieJar 
]);

答案 1 :(得分:2)

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

use GuzzleHttp\Client;
use GuzzleHttp\Cookie\FileCookieJar;

// 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