次の手順を試す前に、サーバー認証がセッションCookieに基づいていることを確認してください。
解決策は私のために働いた:
最初の休憩から2番目のリクエストにCookieを追加する必要があります。この場合、サーバーは2番目のリクエストを認証済みリクエストと見なします。サイトにログインした後の応答では、Cookieには、cookie-name、cookie-value、Expiration Date、Path、Secure、HTTPOnlyなどの値のセットが含まれます。cookie文字列からcookie-nameとcookie-valueを展開します
ログイン応答後のセッションCookieの例:
"JSESSIONID=DQl3NKXXmy3yntp3NW2GMlcn8pLn9PR9rl0lnR6vbtfdVpyHWdnq!598502565; path=/"
"CK_LanguageID_252085=1; expires=Friday, 23-Mar-2012 05:31:03 GMT; path=/; secure"
"CK_TimeZone_252085=4; expires=Friday, 23-Mar-2012 05:31:03 GMT; path=/; secure"
次のパターンで、サーバーとさらに通信するための新しいCookie文字列を作成します。
"JSESSIONID=DQl3NKXXmy3yntp3NW2GMlcn8pLn9PR9rl0lnR6vbtfdVpyHWdnq!598502565; CK_LanguageID_252085=1; CK_TimeZone_252085=4"
zend_http_client"Set-cookie"配列からCookie文字列を作成するための便利なメソッドを追加します。
/**
* Get clean cookie string with only name,value pair
* This method filer all the follwoing cookie information
* Expiration Date, Path, Secure and HTTPOnly
* @access public
* @param {Array} $cookies
* @return {String} $cookieString
*/
public function getCookieString(array $cookies){
$cookieString = null;
foreach($cookies as $cookie){
$part = explode(';',$cookie);
$cookieString = ($cookieString == null)? $part[0] : $cookieString . '; ' . $part[0];
}
return $cookieString;
}
連続したリクエストを行うZend_Http_Clientの使用:
//Login
$client = new Zend_Http_Client($loginUrl);
$response = $client->request();
//Get Header from response
$headers = $response->getHeaders();
//Create second header
$header = array("Cookie" => $this->getCookieString($headers["Set-cookie"]));
$client->setHeaders($header);
//Second request
$client->setUri($redirectUrl);
$response = $client->request();
ここでは、「$ client-> resetParameters();」を削除しています。「$client->setParameterGet()」を使用してGETパラメータを設定していないため(POSTでも同じ)
「$client->setParameterGet()」または「$ client-> setParameterPost()」を使用する場合は、「$ client-> resetParameters();」を使用します。2番目のURIを設定する前。
$ client-> resetParameters()はブール値を受け入れます:
- FALSE:これは、POSTおよびGETパラメータのみをリセットするデフォルト値です。
- TRUE:ヘッダー、最後の要求、最後の応答を含むすべてのパラメーターをリセットします。