首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

,curl模拟登陆的有关问题

2013-02-25 
高手请进,curl模拟登陆的问题我想要做一个模拟登陆,可是一般网站有表单提交的都可以模拟登陆成功就是另一

高手请进,curl模拟登陆的问题
我想要做一个模拟登陆,可是一般网站有表单提交的都可以模拟登陆成功
就是另一些网站,比如速卖通(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基础不是很好,看不懂他的代码,求高手提点下!
感谢啊!
[解决办法]
你可以改改你得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;
  }


[解决办法]
还真是有转向

<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请求.
[解决办法]
引用:
引用:
还真是有转向


PHP code
<script type="text/javascript">
function xman_callback(){
window.location.href = 'http://www.aliexpress.com';
}
……


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

我判断错误,确实firebug没发现js发送post请求,而且都http get的js和图片,为什么没成功还真不好说.
[解决办法]
GET /xman/xlogin.js?pd=aliexpress&xloginPassport=life161@126.com&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位就不知道从哪里接上来的了。

热点排行