在嘗試以下步驟之前,請確保您的服務器身份驗證基於會話Cookie。
解決方案爲我:
您需要從第一養神Cookie添加到第二請求。在這種情況下,服務器將您的第二個請求視爲已驗證的請求。在登錄到站點後的響應中,您的Cookie將具有以下一組值,如Cookie名稱,Cookie值,到期日期,路徑,安全和HTTPOnly。從cookie字符串爆炸cookie的名稱和cookie的值
例會話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();
在這裏,我刪除 「$客戶 - > resetParameters();」因爲您沒有使用「$ client-> setParameterGet()」設置任何GET參數(同樣也適用於POST)
如果使用「$ client-> setParameterGet()」或「$ client-> setParameterPost()」使用「$ client-> resetParameters();」在設置第二個uri之前。
$客戶機 - > resetParameters()接受布爾值:
- FALSE:這是復位POST和僅GET PARAMS的默認值。
- TRUE:重置所有參數,包括標題,上次請求和上次響應。
感謝bstpierre格式化:) – Vijay 2011-03-24 19:06:40