2017-01-30 166 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');