今日花了3天时间研究了下淘宝登录 分别用 php python都实现了淘宝登录


淘宝登录方式 有3种

1. aes 256位加密密码的post登录 需要ua

 2 明文密码 post登录 需要ua

 3 xmlhttp post登录(不需要ua)


xmlhttp post登录(不需要ua)



aes 256位加密密码的post登录  见



明文密码 post登录 需要ua

没有对应的文章 代码在github.com里面有


c#淘宝登录aes 256位加密密码的post登录




测试时注意事项:


本篇内容

1. python模拟登录淘宝网页

2. 获取登录用户的所有订单详情

3. 学会应对出现验证码的情况

4. 体会一下复杂的模拟登录机制

探索部分成果

1. 淘宝的密码用了AES加密算法,最终将密码转化为256位,在POST时,传输的是256位长度的密码。

2. 淘宝在登录时必须要输入验证码,在经过几次尝试失败后最终获取了验证码图片让用户手动输入来验证。

3. 淘宝另外有复杂且每天在变的 ua 加密算法,在程序中我们需要提前获取某一 ua 码才可进行模拟登录。

4. 在获取最后的登录 st 码时,历经了多次请求和正则表达式提取,且 st 码只可使用一次。

整体思路梳理

1. 手动到浏览器获取 ua 码以及 加密后的密码,只获取一次即可,一劳永逸。

2. 向登录界面发送登录请求,POST 一系列参数,包括 ua 码以及密码等等,获得响应,提取验证码图像。

3. 用户输入手动验证码,重新加入验证码数据再次用 POST 方式发出请求,获得响应,提取 J_Htoken。

4. 利用 J_Htoken 向 alipay 发出请求,获得响应,提取 st 码。

5. 利用 st 码和用户名,重新发出登录请求,获得响应,提取重定向网址,存储 cookie。

6. 利用 cookie 向其他个人页面如订单页面发出请求,获得响应,提取订单详情。

直接利用st登录(第5步骤)

得到st之后,基本上就大功告成啦,一段辛苦终于没有白费,你可以直接构建get方式请求的URL,直接访问这个URL便可以实现登录。



       
 
        stURL 
         
        = 
         
        'https://login.taobao.com/member/vst.htm?st=%s&TPL_username=%s' 
         
        % 
         
        ( 
        st 
        , 
        username 
        ) 






演示代码

global checkCodeUrl
    cookieJar = cookielib.LWPCookieJar()#LWPCookieJar提供可读写操作的cookie文件,存储cookie对象
    #Processor 处理器
    cookieSupport= urllib2.HTTPCookieProcessor(cookieJar)
    # opener 开启工具
    opener = urllib2.build_opener(cookieSupport, urllib2.HTTPHandler)
    urllib2.install_opener(opener)
    #打开登陆页面
    taobao = urllib2.urlopen(tbLoginUrl)
    resp = taobao.read().decode("gbk")


$response = $this->curl($tokenURL,$this->Headers,'',dirname(__FILE__)."/cookie/login2.php.cookie", dirname(__FILE__)."/cookie/login2.php.cookie",'','',"https://login.taobao.com/member/login.jhtml?redirectURL=" . urlencode($_SESSION['gotoURL']));


经验

/*
 注意st只能使用一次
 注意打开 https://passport.alipay.com/mini_apply_st.js?site=0&token=1foaB1n8zzwqaUR-iJnIknA&callback=stCallback6
 curl 这里程序老是不行,反复对比 cookie 和referer都不行,  返回 提示“  抱歉,暂时无法操作。”
       排错结果 : 多了这个 curl_setopt($ch, CURLOPT_POST, true);
 
 
 结果用火狐直接打开 确实可以的

*/