【问题标题】:Setting up cookies for Guzzle CookieJar为 Guzzle CookieJar 设置 cookie
【发布时间】:2017-06-22 18:37:28
【问题描述】:

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

[ 'user_token' => '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae' ] 

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

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

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

【问题讨论】:

  • 您是否正在考虑将 jar 存储在一个文件中并重复使用它们??
  • 也许吧。随着单元测试的进行,相同的身份验证令牌可以用于多个请求,这样就可以了。
  • 少量语法和拼写修复。

标签: php cookies guzzle


【解决方案1】:

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 
]);

【讨论】:

    【解决方案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 session cookie 我们必须将第二个参数设置为 TRUE。

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

    参考

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

    【讨论】:

    • 您实际上并没有阅读我的问题。 “我需要将 cookie 放入 Jar”部分意味着我需要将值放入其中。请参阅下面的答案。
    • 首先让文件被创建。然后只需更改令牌
    • 不是一个好的解决方案。尤其是当班级有一种特定的方法可以完全按照我的意愿行事时(在上面我自己的问题的答案中)。
    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 2019-01-27
    • 2012-08-17
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多