使用PHP和CURL登录网站

时间:2012-09-16 19:42:29

标签: php curl login

我正在尝试自动登录https://www.myicomfort.com/来检索数据。试过发布的一些例子,但似乎没有用。传递用户名和密码时,我可能没有使用正确的字段名称。有人可以帮忙吗?还在学习PHP。谢谢!

$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL,"https://www.myicomfort.com/");  
curl_setopt($ch, CURLOPT_COOKIEFILE,1);  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  
curl_setopt($ch, CURLOPT_HEADER, true);    
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);  
curl_setopt($ch, CURLOPT_TIMEOUT, 120);  

$post_array = array(  
'ctl00$RightContent$txtUserName'=>'xxxname',  
'ctl00$RightContent$txtPwd'=>'xxxpassword',  
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_array); 

$output = curl_exec($ch);

curl_close($ch);

`

3 个答案:

答案 0 :(得分:1)

您缺少其他字段。您可以在Chrome中按Ctrl + Shift + I查看要发送的字段,然后尝试登录。点击页面,您将看到如下内容:

__LASTFOCUS:
__EVENTTARGET:
__EVENTARGUMENT:
__VIEWSTATE:/wEPDwUKMTczNjcxMDc0Mg9kFgJmD2QWAgIDD2QWBAIDD2QWBAI...
__EVENTVALIDATION:/wEWCAKI/qyXDAKSptf/CwKJn6v3AQKdg7/fBwKNoqOVDAK...
ctl00$RightContent$hdnPwd:
ctl00$RightContent$txtUserName:asfasdfa
ctl00$RightContent$txtPwd:dfasdf
ctl00$RightContent$chkRemember:on
ctl00$RightContent$btnLogin:Log in

尝试提交这些数据。完成此操作后,您应该能够登录。

答案 1 :(得分:0)

确保您使用了所需的所有输入字段,对从表单中传输的信息进行净嗅探导致此

'__EVENTARGUMENT'   
'__EVENTTARGET' 
'__EVENTVALIDATION'             /wEWCAKI/qyXDAKSptf/CwKJng .. etc
'__LASTFOCUS'   
'__VIEWSTATE'                   /wEPDwUKMTczNjcxMDc0Mg9kFgJmD2QWAg .. etc
'ctl00$RightContent$btnLog...'  Log in
'ctl00$RightContent$chkRem...'  on
'ctl00$RightContent$hdnPwd' 
'ctl00$RightContent$txtPwd'     vyvuy
'ctl00$RightContent$txtUse...'  iuhgiu

另请参阅this question on SO我相信他们建议在缺少登录按钮的地方

答案 2 :(得分:0)

你可以查看该页面的源代码,有很多隐藏的输入字段。只提供您的用户名和密码是不够的。

解决方案:

  1. 获取所有这些字段并使用PHP
  2. 将它们一起发送出去
  3. 使用一些可以模拟浏览器的库,然后你只能在登录时提供用户名和密码。这会有点慢,但不是代码的瓶颈。