我想要做一个模拟登陆,可是一般网站有表单提交的都可以模拟登陆成功
就是另一些网站,比如速卖通(https://login.aliexpress.com/)我的代码是这写的<?php function vlogin($url,$request){
        $cookie_jar = tempnam('./tmp','cookie');//在当前目录下生成一个随机文件名的临时文件
        $ch = curl_init(); //初始化curl模块
        curl_setopt($ch,CURLOPT_URL,$url);//登录页地址
        curl_setopt($ch, CURLOPT_POST, 1);//post方式提交
        curl_setopt($ch, CURLOPT_POSTFIELDS, $request);//要提交的内容
        //把返回$cookie_jar来的cookie信息保存在$cookie_jar文件中
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
        //设定返回的数据是否自动显示
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //设定是否显示头信息
        curl_setopt($ch, CURLOPT_HEADER, false);  
        //设定是否输出页面内容
        curl_setopt($ch, CURLOPT_NOBODY, false);
        curl_exec ($ch); 
        curl_close($ch); //get data after login        
        return $cookie_jar;
    }
    
//登录成功后通过cookies获取页面内容
    function get_content_by_cookie($url,$cookie_jar){
        $ch2 = curl_init();        
        curl_setopt($ch2, CURLOPT_URL, $url);
        curl_setopt($ch2, CURLOPT_HEADER, false);
        curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookie_jar);
        $orders=curl_exec($ch2);        
        curl_close($ch2); 
        return $orders;
    } function clear_cookie($cookie_tmp_name){
        @unlink($cookie_tmp_name);
    }
    $list_url='http://cn.ae.alibaba.com/index.htm';
    $login_url='https://login.aliexpress.com/';
    $post_data='pd=aliexpress&xloginPassport=******&xloginPassword=******';
    $cookie_file=vlogin($login_url,$post_data);    
    $tmp_curl=get_content_by_cookie($list_url,$cookie_file);
echo $cookie_file;
echo $tmp_curl;

//clear_cookie($cookie_file);

?>
可是登陆不成功,感觉应该是 $login_url 错了,速卖通里既然是不通过form提交的,我JS基础不是很好,看不懂他的代码,求高手提点下!
感谢啊!

解决方案 »

  1.   

    用它自己的网站登录界面登录,用firebug抓提交的信息看看有没有漏掉什么
      

  2.   

    你login提交过去的是https,一般不引入本地证书进行验证
    function vlogin($url,$request){
    ...
    ..
    curl_setopt($ch,CURLOPT_URL,$url);//登录页地址
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); //加入这一行先
    ..
    ..
    }
      

  3.   

    那你得设置这个参数为true,然后引入本地验证相关文件地址啊。
    http://php.net/manual/en/book.curl.php
    看第二个评论
      

  4.   

    你可以改改你得vlogin函数,察看返回头+body
    function vlogin($url,$request){
      $cookie_jar = tempnam('./tmp','cookie');//在当前目录下生成一个随机文件名的临时文件
      $ch = curl_init(); //初始化curl模块
      curl_setopt($ch,CURLOPT_URL,$url);//登录页地址
      curl_setopt($ch, CURLOPT_POST, 1);//post方式提交
      curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); //你注释掉这一行再看看,有http返回吗?
      curl_setopt($ch, CURLOPT_POSTFIELDS, $request);//要提交的内容
      //把返回$cookie_jar来的cookie信息保存在$cookie_jar文件中
      curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
      //设定返回的数据是否自动显示
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      //设定是否显示头信息
      curl_setopt($ch, CURLOPT_HEADER, true);//改成true察看返回头  
      //设定是否输出页面内容
      curl_setopt($ch, CURLOPT_NOBODY, false);
      $loginReturn = curl_exec ($ch); 
      curl_close($ch); //get data after login  
      echo $loginReturn;//察看提交之后返回头 + 页面
      return $cookie_jar;
      }
      

  5.   

    https和http是不一样的,比如http默认是80端口,https是443
      

  6.   


    我觉得应该是$url有问题,可是查不出
      

  7.   

    你加了这一行
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); 
    是不是看到login的http返回了?
      

  8.   

    返回头里一串Set-cookie了,你要是不加,下次请求的时候都不能附带上正确的cookie了,接下来的问题你自己去研究咯,你又说需要验证本地ssl,那你得引入请求过去,我看了下返回头和页面,头里没有Location进行转向,页面也看到有location.href转向,你像gmail登陆就分3,4个步骤,不停的set-cookie,不停的转向.
      

  9.   

    还真是有转向 <script type="text/javascript">
         function xman_callback(){
         window.location.href = 'http://www.aliexpress.com';
         }
        </script>
    <script src="https://login.alibaba.com/xman/xman.js?pd=aliexpress&display=e&div_id=expressbuyerlogin&style=l&login=b&lbutton=c&link=b"></script>
    下面那个script引入的js是关键,向某个后台地址ajax post了,然后调用这个xman_callback,你可以用用sniff监视http请求.
      

  10.   


    嗯,我也试下看,刚用firebug看过了,没看出来
      

  11.   

    代码不是你自己写的吧?目标地址$login_url不对,登录参数,并非POST方式,密码也不是原文,参数也有遗漏……怎么可能登陆成功
      

  12.   

    我判断错误,确实firebug没发现js发送post请求,而且都http get的js和图片,为什么没成功还真不好说.
      

  13.   


    比较麻烦,找不出POST请求页面
      

  14.   

    代码是网上的,$login_url感觉是不对,参数应该是对的
      

  15.   

    这个站点没有公用的登陆地址么? 如果有,你在浏览上登陆一遍,用sniff实时监控,然后分析请求接收http包会方便很多
      

  16.   

    GET /xman/xlogin.js?pd=aliexpress&[email protected]&xloginPassword=efbd1d299018076b3070cd57dd73d00d&xloginCheckToken=&dmtrack_pageid=7f0000017f00000112941294359245968776703539 HTTP/1.1+++++++++++++++++++++++++++++++++++++
    是GET方式向 xman/xlogin.js 提交数据
    其中“xloginPassword”并不是简单的md5加密,具体的算法在beacon_ws.js可以看到
    dmtrack_pageid 这个参数的值前26位是可以在https://login.aliexpress.com/页中抓取的,但后面的16位就不知道从哪里接上来的了。
      

  17.   

    说的不错,后面还有16位,不过感觉dmtrack_pageid为空应该也可以登陆,看我的http头HTTP/1.1 200 OK Date: Mon, 10 Jan 2011 02:17:43 GMT Server: Apache/2.2.15 (Unix) mod_AliCookie(for apache2.x)/1.1 Beacon/3.2 mod_jk/1.2.28 mod_ssl/2.2.15 OpenSSL/0.9.8o X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)/Tomcat-5.5 Expires: Thu, 01 Jan 1970 00:00:00 GMT Cache-Control: no-cache Pragma: no-cache P3P: CP="NON DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa HISa TELa OTPa OUR UNRa IND UNI COM NAV INT DEM CNT PRE LOC" Resin-Trace: ali_resin_trace=signsucc=y|[email protected] Content-Language: en-US Content-Length: 550 Vary: Accept-Encoding,User-Agent Content-Type: application/json;charset=GBK Set-Cookie: ali_apache_id=125.107.157.131.85740025863253.0; path=/; domain=.alibaba.com; expires=Wed, 30-Nov-2084 01:01:01 GMT Set-Cookie: ali_apache_sid=125.107.157.131.85740025863253.0|1294627663; path=/; domain=.alibaba.com Set-Cookie: ali_apache_id=127.0.0.1.43994925863254.3; path=/; domain=.alibaba.com; expires=Wed, 30-Nov-2084 01:01:01 GMT Set-Cookie: ali_apache_sid=127.0.0.1.43994925863254.3|1294627663; path=/; domain=.alibaba.com Set-Cookie: intl_acs_temp=IhX8FFkEkx8/9Z0biQqL6yOI1lF1ZHsn6mBvTS7qb/lgP/Ma8faTLptjYN6KwIBI1rUNF3le1rg=; Domain=.alibaba.com; Path=/ Set-Cookie: intl_acs_forever=ulHO3kBD8YrbpcIaRxqK9UG5Ss3vlon0T0McN/J50HI8FbEmT4WFcBD2CgwgQiO76QImLm+encFcQR/eoG0PID18G30iaRpX; Domain=.alibaba.com; Expires=Sat, 28-Jan-2079 05:31:50 GMT; Path=/ Set-Cookie: intl_common_forever=VMQ3kPaB6Oh2v733Vy/ScV80k1T1DNFOohuz/EYwqJwHOAqv08A8UQuwPiSoiF4ECqobw0NiKRqQXJsqG4SfpA==; Domain=.alibaba.com; Expires=Sat, 28-Jan-2079 05:31:50 GMT; Path=/ Set-Cookie: uns_unc_t=sid=63aa817318a64a7cac5ee9c1a31e1167; Domain=.alibaba.com; Path=/ Set-Cookie: login_forever=pH+Ht1dBjCUvga1xFMQkBTV4qjbrPljreyut2lbYMvLexTZVJhYa2RePKwa2ZRj3tdQYtdITcIScaQmpfTv+Qm1IoLojqpTuVj1Tcqvf0BtDFnejO8VruAGIlyH4AX6ygMLuoJhea0seU0cgy8J3IGxsIqXZhTCA/CPPw3QtG7c9xgZGcBTFHg==; Domain=.alibaba.com; Expires=Sat, 28-Jan-2079 05:31:50 GMT; Path=/ Set-Cookie: ali_apache_track=; Domain=alibaba.com; Expires=Wed, 12-Mar-2014 12:04:22 GMT; Path=/ Set-Cookie: ali_apache_tracktmp=; Domain=alibaba.com; Path=/ var xman_success={"person_data":{"login_id":"cn117550396","first_name":"Roderick","email":"[email protected]","last_name":"Lao","country":"CN"},"xlogin_urls":["https://login.aliexpress.com/xman/tvs.htm?iframe_delete=true&pid=117476334&token=5652eb4e-b6fe-48d1-bd70-480abe93eace&domain=aliexpress&cookie=e_xman_t2","https://login.alibaba.com/xman/tvs.htm?iframe_delete=true&pid=117476334&token=5652eb4e-b6fe-48d1-bd70-480abe93eace&domain=aliexpress&cookie=e_xman_t1"],"time_out":"30000","forced_return":null,"proxy_cookies":["e_xman_t2","e_xman_t1"]} 应该是已经登陆了的
      

  18.   


    自己弄了几天,还是没实现,悲剧啊$login_url='https://login.alibaba.com/xman/xlogin.js';
        $post_data='pd=aliexpress&[email protected]&xloginPassword=86eb79049a153ba4501028efa25378be&xloginCheckToken=';感觉应该是登陆成功了,却无法获取页面内容
      

  19.   

    是怎麼解決呢?我的問題是curl總收到一個過期cookies「1970-1-1 00:00:00」,請問要如何解決呢??