查了很多档案,实在是难住了。
始终报用户名或者密码错误,其实是正确的。
恳请点拨一二。
谢谢。

解决方案 »

  1.   

    先感谢您的关注:
    其实是这样子的。一般都是用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);