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); 跳转到同一页面显示的是不同标签的内容,如何实现 mysql order排序时能否用其它表中的数据来排序? 各位看官来帮帮忙啊 求助一段关于fopen的代码 phplib template 模板记录该如何显示~ (菜鸟问得瓜)关于apache的事,apache社区那里没啥人气,只好跑到这里来了 实时新闻是什么原理,大家说说! 找朋友帮忙测试程序并散分~~ 如果取得一个目录的绝对路径? 我想在用户登陆后,关闭浏览器(session消失)时,update一下数据库有办法吗? 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);