php 能登录 hotmail 么? 查了很多档案,实在是难住了。始终报用户名或者密码错误,其实是正确的。恳请点拨一二。谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先感谢您的关注:其实是这样子的。一般都是用curl模拟post的数据。hotmail对数据的验证比较独特,他有个变量值是"ifYouAreReadingThisYouHaveTooMuchFreeTime",如果密码长度是1位,他就把这个变量的最后一位截掉,如果是两位,则最后两位截掉。当然他还有其它莫名其妙的变量,每次访问值都会变。不过我先模拟访问登录入口页面。根据监测到的数据探测到了所有的post变量,并发送了出去。但是它始终报告地址或者密码错误,如果我在页面上直接输入,则可以进去。我已经设置了useragent,referer,以及所有我可能想得到的设置。看到一些外国人也在弄,但是好像没有答案。源代码比较乱,您将就着看一下,若能指点一二,不胜感激。[code=PHP] $cookie_jar = tempnam('./tmp','cookie'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://login.live.com"); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_NOBODY, false); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); $source=curl_exec($ch); curl_close($ch);//die($source.file_get_contents($cookie_jar)); preg_match('/action="(.*?)"/',$source,$match);//get action link $action=$match[1]; preg_match_all('/<input.*?name="(.*?)".*?value="(.*?)"/',$source,$matches);//get all variables $request=""; foreach($matches[1] as $key=>$name){ if($name=="LoginOptions"||$name=="SI") continue; if($name=="login") $matches[2][$key]=$account; if($name=="PwdPad") $matches[2][$key]="IfYouAreReadingThisYouHaveTooMuchFr"; if($name=="passwd") $matches[2][$key]=$password; $request.=$name."=".$matches[2][$key]."&"; } $request.="LoginOptions=2"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "$action");//echo $action."<br>"; curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "$request");//echo $request."<br>"; curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch,CURLOPT_REFERER,"$action"); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $source=curl_exec($ch);//始终错误 curl_close($ch); 文件批量读取和导入 Header may not contain more than a single header 删除确认的写法? 任务中国诚聘PHP程序员2名 求一个不许要验证的SMTP服务器 关于array数组输出问题 phpMyAdmin密码验证问题 这句SESSION报错是什么意思? 一个php的session问题 PHP正则表达式的问题 PHP5插入中文不行! 是MYSQL 5来的。 还是请教高手,解决php替换问题!!!
其实是这样子的。一般都是用curl模拟post的数据。
hotmail对数据的验证比较独特,他有个变量值是"ifYouAreReadingThisYouHaveTooMuchFreeTime",
如果密码长度是1位,他就把这个变量的最后一位截掉,如果是两位,则最后两位截掉。当然他还有其它莫名其妙的变量,每次访问值都会变。
不过我先模拟访问登录入口页面。根据监测到的数据探测到了所有的post变量,并发送了出去。
但是它始终报告地址或者密码错误,如果我在页面上直接输入,则可以进去。
我已经设置了useragent,referer,以及所有我可能想得到的设置。
看到一些外国人也在弄,但是好像没有答案。
源代码比较乱,您将就着看一下,若能指点一二,不胜感激。
[code=PHP]
$cookie_jar = tempnam('./tmp','cookie');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://login.live.com");
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); $source=curl_exec($ch);
curl_close($ch);
//die($source.file_get_contents($cookie_jar)); preg_match('/action="(.*?)"/',$source,$match);//get action link
$action=$match[1];
preg_match_all('/<input.*?name="(.*?)".*?value="(.*?)"/',$source,$matches);//get all variables
$request="";
foreach($matches[1] as $key=>$name){
if($name=="LoginOptions"||$name=="SI")
continue;
if($name=="login")
$matches[2][$key]=$account;
if($name=="PwdPad")
$matches[2][$key]="IfYouAreReadingThisYouHaveTooMuchFr";
if($name=="passwd")
$matches[2][$key]=$password;
$request.=$name."=".$matches[2][$key]."&";
}
$request.="LoginOptions=2"; $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$action");
//echo $action."<br>";
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$request");//echo $request."<br>";
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch,CURLOPT_REFERER,"$action");
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$source=curl_exec($ch);//始终错误
curl_close($ch);