2017-01-30 121 views
0

登錄URL登錄到遠程站點是:通過登錄頁面https://192.X.X.X/abc/Login.aspx?FromMasterLogin=true通過PHP捲曲

部首數據發送:

__EVENTTARGET:btnLogin __EVENTARGUMENT: __VIEWSTATE:/ wEPDwULLTEwNzI1MzU5MzBkGAIFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYGBQhidG5Mb2dpbgUPYnRuQ2xlYXJTZXNzaW9uBRFSYWRXaW5kb3dNYW5hZ2VyMQUOcmR3aW5kb3dGb3JnZXQFD3Jkd2luZG93RW5mb3JjZQUYcmRXaW5kb3dQdWJsaWNOZXdzQWxlcnRzBQpyYWRDYXB0Y2hhDxQrAAIFJDQyM2FlNDE3LTEwMTctNDE2OS1hNjgzLTBmMjMyZDZkMDdmZAYAAAAAAAAAAGQdkHIfEfL2XAG + 8 +/wu30lMfjmEwOeIiiC7jveX5PnZg == __EVENTVALIDATION:/ wEdAAfBlkUqNKBEV3moC9pS8IJTY3plgk0YBAefRz3MyBlTcJxpWckI3qdmfEJVCu2f5cGinihG6d/Xh3PZm3b5AoMQf2Dr69OxAarGhVFbQWZWFpd + ecw9lQ5sg8SY03yGmgNKhPS/+ yQ5 + zLwEb8uDfAwYKkBfoLWkbIJoPnHfXTqz5B/= txtUserName GZyy44ThZCPCAskCEVA:管理員 txtUserName_ClientState:{ 「啓用」:真 「emptyMessage」: 「」}啓用 txtpassword:管理員@ 123 txtpassword_ClientState {「 「:真正的」 emptyMessage 「:」「} btnLogin_ClientState:btnClearSession_ClientState: rdwindowForget_ClientState:rdwindowEnforce_ClientState: rdWindowPublicNewsAlerts_ClientState:RadWindowManager1_ClientState:

下面是代碼

<?php 
//username and password of account 
$username = 'admin'; 
$password = '[email protected]'; 


//login form action url 
$url="https://192.168.X.X/abc/Login.aspx?FromMasterLogin=true"; 
$postinfo ='txtUserName:admin&txtpassword:[email protected]'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_NOBODY, false); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 

//set the cookie the site has for certain features, this is optional 
curl_setopt($ch, CURLOPT_COOKIE, "cookiename=0"); 
curl_setopt($ch, CURLOPT_USERAGENT, 
    "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo); 
curl_exec($ch); 

//page with the content I want to grab 
//curl_setopt($ch, CURLOPT_URL, "https://192.168.X.X/abc/MemberManagement/MemberFileDownload.aspx"); 
//do stuff with the info with DomDocument() etc 
$html = curl_exec($ch); 
echo $html; 
curl_close($ch); 
?> 

但結果表明會話過期。

+1

你的代碼不獲取會話,也沒有模仿1.修復你的代碼先取得一個會話cookie,然後嘗試登錄(或交替。 ,通過克隆cookie會話ID使其模擬您的瀏覽器的會話) – hanshenrik

回答

0

我意識到這並不能回答你關於curl的具體問題,但它可能值得嘗試一下PHP的Guzzle HTTP客戶端,它包括一些用於維護會話的功能,並減少直接使用curl工作的混亂。

下面是來自Guzzle documentation片段:

// Use a specific cookie jar 
$jar = new \GuzzleHttp\Cookie\CookieJar; 
$r = $client->request('GET', 'http://httpbin.org/cookies', [ 
    'cookies' => $jar 
]); 

// Use a shared client cookie jar 
$client = new \GuzzleHttp\Client(['cookies' => true]); 
$r = $client->request('GET', 'http://httpbin.org/cookies');