4

Zend Http Client から Guzzle Http Client に移行しようとしています。Guzzle は機能が充実しており、ほとんどの場合使いやすいと思いますが、Cookie プラグインの使用に関しては十分に文書化されていないと思います。私の質問は、Guzzle で、サーバーに対して行う HTTP リクエストの Cookie をどのように設定するかです。

Zend Client を使用すると、次のような簡単なことを実行できます。

$client = new HttpClient($url);   // Zend\Http\Client http client object instantiation
$cookies = $request->cookies->all();   // $request Symfony request object that gets all the cookies, as array name-value pairs, that are set on the end client (browser) 
$client->setCookies($cookies);  // we use the above client side cookies to set them on the HttpClient object and,
$client->send();   //finally make request to the server at $url that receives the cookie data

では、Guzzle でこれを行うにはどうすればよいでしょうか。http://guzzlephp.org/guide/plugins.html#cookie-session-pluginを見てきました。しかし、それは一筋縄ではいかず、理解できませんでした。誰かが助けてくれるかも??

4

2 に答える 2

5

このコードは、要求された内容を実現する必要があります。つまり、guzzleクライアント要求を行う前に要求にCookieを設定する必要があります。

$cookieJar = new ArrayCookieJar();  // new jar instance
$cookies = $request->cookies->all(); // get cookies from symfony symfony Request instance
foreach($cookies as $name=>$value) {  //create cookie object and add to jar
  $cookieJar->add(new Cookie(array('name'=>$name, 'value'=>$value)));
}

$client = new HttpClient("http://yourhosturl");
$cookiePlugin = new CookiePlugin($cookieJar);

// Add the cookie plugin to the client object
$client->addSubscriber($cookiePlugin);

$gRequest = $client->get('/your/path');

$gResponse = $gRequest->send();      // finally, send the client request

set-cookieヘッダーを使用してサーバーから応答が返されると、それらのcookieが$cookieJarで使用可能になります。

CookiejarはCookiePluginメソッドからも取得できます

$cookiePlugin->getCookieJar();
于 2012-08-21T23:33:01.590 に答える
2

またはCookieプラグインなし

$client = new HttpClient();

$request = $client->get($url);

foreach($cookies as $name => $value) {
    $request->addCookie($name, $value);
}

$response = $request->send();
于 2014-04-17T08:48:17.423 に答える