web-dev-qa-db-ja.com

Guzzle CookieJarのCookieを設定する

私はPHP認証を必要とするサイトに対してユニットテストを行っています。認証はCookieベースであるため、次のようなCookieをCookie jarに入れる必要があります。

[ 'user_token' => '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae' ] 

その後、Webアプリケーションはこの既知の適切なトークンをテストデータに使用でき、テスト条件下で認証してデータフィクスチャとやり取りできます。

また、それは安全なcookieでなければならず、私は(明らかに)ドメインを設定する必要があります。

問題は次のとおりです。このCookieを作成して設定し、jarに貼り付ける方法がわかりません。どうやってやるの?

7
DrDamnit

ソースコード 必要な答えが提供されました。

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

簡単な例。このコードは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を保存するには、2番目のパラメーターをTRUEに設定する必要があります。

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

参照

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

4
Abdullah Mallik