2012-04-03 126 views
0

我正在尝试使用以下cURL操作登录bangme.net图片评级网站。当我检查登录表单时,这些ID是signin_UserName,signin_UserPass。名称是签名$用户名,签署$ UserPass。该脚本似乎没有与下划线一起工作,因为结果导致我要求我登录尽可能远的页面。我无法使用美元符号名称,因为它把它变成了一个变量。我注意到这个和类似脚本的一些示例显示了一些以'&'标志开头的字段,当它们没有在他们想要登录的网页的表单上。这是做什么的?任何你可以提供的援助将不胜感激。谢谢。使用卷曲登录

$username = "username"; 
$password = "password"; 
$url = "http://www.bangme.net/starform.aspx"; 
$cookie = "cookie.txt"; 

$postdata = "signin_UserName=" .$username . "signin_UserPass=" .$password; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt($ch, CURLOPT_REFERER, $url); 

curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt($ch, CURLOPT_POST, 1); 
$result = curl_exec($ch); 

echo $result; 
curl_close($ch); 

新代码:

$username = "username"; 
$password = "password"; 
$url = "http://www.bangme.net/signin.aspx"; 
$cookie = "cookie.txt"; 

$post = array(
     '__EVENTTARGET'=>"" , 
     '__EVENTARGUMENT'=>"", 
     '__VIEWSTATE'=>"/wEPDwUJMzQ0MjU1MjA0ZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAwUJbGFzdHBob3RvBQh2b3RleWVzMgUHdm90ZW5vMgfkai25gOMuDdbmzYMWHA2LgYKt", 
     '__EVENTVALIDATION'=>"/wEWDgLmnpGMBwKOwMbqCwK4wb4IAv/10agEAqHH7a8KAtXfk+ULAt/Q94gCAvS2udYOAqrdhtcHAq+k5d0LAo+Au5MKApm/3+0OAqDCuuYMArCmgTeosqrEgmB3P5bavC40rTc6dbeF1g==", 
     'signin$UserName'=>$username , 
     'signin$UserPass'=>$password , 
     'signin$Button1.x'=>42, 
     'signin$Button1.y'=>17 
     ); 

$postData = http_build_query($post); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//changed from 0 to 1 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt($ch, CURLOPT_REFERER, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//new 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//new 


curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 
curl_setopt($ch, CURLOPT_POST, 1); 
$result = curl_exec($ch); 

echo $result; 
curl_close($ch); 

回答

2

我看到3件事错在这里

A.错误的变量声明....

修正

$post = 'signin$UserName=' . $username . '&signin$UserPass=' . $password; 

B.错误的URL

纠错

http://www.bangme.net/signin.aspx 

C.参数不完整的系统要求如下:

编辑1名

$post = array(
     '__EVENTTARGET'=>"" , 
     '__EVENTARGUMENT'=>"", 
     '__VIEWSTATE'=>'/wEPDwULLTEyMzUzNDExNjFkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYCBRdzaWduaW4kUmVtZW1iZXJDaGVja2JveAUOc2lnbmluJEJ1dHRvbjFA3HLFp6KEVYvii7p6PjecyYMsaw==', 
     '__EVENTVALIDATION'=>'/wEWBQL/xuPVDgLCoo75CQKoiOf4DQKtwMGFDgLz0rmTDUnuxoGtW34gNpQqIpwh3OT11JJl', 
     'signin$UserName'=>$username , 
     'signin$UserPass'=>$password , 
     'signin$Button1.x'=>42, 
     'signin$Button1.y'=>17 
     ); 
$postData = http_build_query($post); 

编辑2

完整标题...刚刚发现它也有饼干

POST http://www.bangme.net/signin.aspx HTTP/1.1 
Host: www.bangme.net 
Connection: keep-alive 
Content-Length: 391 
Cache-Control: max-age=0 
Origin: http://www.bangme.net 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19 
Content-Type: application/x-www-form-urlencoded 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Referer: http://www.bangme.net/signin.aspx 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie: ASP.NET_SessionId=1jqjwt45h0gpzb452rvrcu55; __utma=178887351.705741064.1333412926.1333412926.1333412926.1; __utmc=178887351; __utmz=178887351.1333412926.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); __utmb=178887351 

__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTEyMzUzNDExNjFkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYCBRdzaWduaW4kUmVtZW1iZXJDaGVja2JveAUOc2lnbmluJEJ1dHRvbjFA3HLFp6KEVYvii7p6PjecyYMsaw%3D%3D&__EVENTVALIDATION=%2FwEWBQL%2FxuPVDgLCoo75CQKoiOf4DQKtwMGFDgLz0rmTDUnuxoGtW34gNpQqIpwh3OT11JJl&signin%24UserName=test&signin%24UserPass=test&signin%24Button1.x=42&signin%24Button1.y=17 

编辑3

变化

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); 

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

感谢

:)

+0

谢谢巴巴,你能告诉我如何实现你在C中描述的参数吗? – KiloJKilo 2012-04-03 00:47:03

+0

以及您如何确定这些参数是必需的? – KiloJKilo 2012-04-03 00:54:39

+0

这就是当你点击提交 – Baba 2012-04-03 00:56:22

1

您将需要使用与美元符号的表单字段名称;您需要转义$,以便它不被解释为变量,或者将其粘贴在单引号中,因此仅以纯文本形式评估。

$post = 'signin$UserName=' . $username . '&signin$UserPass=' . $password; 
// or 
$post = "signin\$UserName=$username&signin\$UserPass=$password"; 

试试看看你有没有进展。在浏览器中使用类似Wiresharklivehttpheaders的内容嗅探请求,以帮助您查看提交数据的确切格式。

又见PHP - Strings - Single Quoted

+0

感谢您的回复,它帮助了我的原始问题。 :) – KiloJKilo 2012-04-03 20:36:32

0

至于我可以看到你只是你的两个职位参数之间缺少一个符号(&)。

为了处理输入字段名称中的$,只需在代码中使用\$(转义美元符号),或者将带有$符号的部分放入单引号中。 (但你必须把所有的变量引用字符串外,并用.将它们连接起来)

+0

感谢您的回应。 – KiloJKilo 2012-04-03 20:36:48