今天看到同事参与小米的抢购,几经数个星期的尝试,终于抢到了一台小米电视……看了一下小米的抢购流程,似乎可以用程序可破。于是想写点东西玩玩(你懂的……),第一步肯定是先得模拟登录小米帐号,当练手吧。

用 Python 来实现吧,由于是写一个Web应用,那么框架就选 Tornado。

首先是定义应用的 URL:

def main():

tornado.options.parse_command_line()

application = tornado.web.Application([

(r"/", MainHandler),

(r"/mibuy/", MiBuyHandler),

],**settings)

http_server = tornado.httpserver.HTTPServer(application)

http_server.listen(options.port)

tornado.ioloop.IOLoop.instance().start()

接下来就是寻找需要 post 过去的数据,用 Fiddler 来嗅探一下:

也就是说,POST 的地址是 https://account.xiaomi.com/pass/serviceLoginAuth2

需要构造的表单参数也很简单(已进行 URL 编码):passToken=&user=www.nowamagic.net&pwd=password&callback=https%3A%2F%2Faccount.xiaomi.com&sid=passport&qs=%253Fsid%253Dpassport&hidden=&_sign=KKkRvCpZoDC%2BgLdeyOsdMhwV0Xg%3D。即:

post_data = urllib.urlencode({'passToken':'', 'user': 'www.nowamagic.net', 'pwd': 'password', 'callback':'https://account.xiaomi.com', 'sid':'passport', 'qs':'%3Fsid%3Dpassport', 'hidden':'', '_sign':'KKkRvCpZoDC+gLdeyOsdMhwV0Xg='})

path = 'https://account.xiaomi.com/pass/serviceLoginAuth2'

接下来函数也可以写出来了:

class MiBuyHandler(tornado.web.RequestHandler):

def get(self):

cj = cookielib.CookieJar()

post_data = urllib.urlencode({'passToken':'', 'user': 'www.nowamagic.net', 'pwd': 'password', 'callback':'https://account.xiaomi.com', 'sid':'passport', 'qs':'%3Fsid%3Dpassport', 'hidden':'', '_sign':'KKkRvCpZoDC+gLdeyOsdMhwV0Xg='})

path = 'https://account.xiaomi.com/pass/serviceLoginAuth2'

cookieHandle = urllib2.HTTPCookieProcessor(cj)

opener = urllib2.build_opener(cookieHandle)

#opener.addheaders = [('User-agent', 'Opera/9.23')]

urllib2.install_opener(opener)

req = urllib2.Request(path, post_data)

response = urllib2.urlopen(req)

html = response.read()

self.render("mibuy.html",message=html)

如何需要把 cookie 打印出来,直接 print cj 就可以看到 cookie 的内容。

接下来的事情貌似也很简单,就是解析 hdcontrol (URL:http://tc.hd.xiaomi.com/hdget?callback=hdcontrol) 这个 json。

hdcontrol(

{

stime: 1383645496,

status: {

allow: true,

miphone: {

hdurl: "",

duration: null,

hdstop: true,

reg: true,

pmstart: false,

hdstart: false

},

mibox: {

hdurl: "",

duration: null,

hdstop: true,

reg: true,

pmstart: false,

hdstart: false

},

mitv: {

hdurl: "",

duration: null,

hdstop: true,

reg: false,

pmstart: false,

hdstart: false

}

}

})

当 allow 为 true 的时候,hdurl 会有值,比如 ?_a=20131105_phone_a212a2b30e5&_op=choose&_s=72b686828&_m=1 之类的,这个就是真实的抢购地址,直接访问这个地址应该就不用再点排队的按钮。仅当抛砖引玉,懂程序的各位都该知道怎么办了吧……

仅仅适用于目前(2013年11月),后续小米那边可能会改变一些规则。

python模拟手机登录_Python(Tornado)模拟登录小米抢手机相关推荐

  1. python操作手机京东_Python实现自动上京东抢手机

    本文实例为大家分享了Python自动上京东抢手机的具体代码,供大家参考,具体内容如下 上次抢荣耀V9,被京东给恶心到了,所以就写了个简单的Python来自动抢V9.虽然用的是比较蠢的方法,但觉得还是有 ...

  2. python爬取京东手机参数_python抓取京东小米8手机配置信息

    本文代码是使用python抓取京东小米8手机的配置信息 首先找到小米8商品的链接:https://item.jd.com/7437788.html 然后找到其配置信息的标签,我们找到其配置信息的标签为 ...

  3. python单用户登录_Python 实现用户登录的简单方法

    #实现用户的登录 设定一个用户名和密码,用户输入正确的用户名和密码,则显示登录成功 否则提示登录失败,用户最多失败3次,否则退出程序 思路: 1)初始化用户名和密码 2)输入用户名和密码 3)判断用户 ...

  4. 手机编写python程序_Python实现自动上京东抢手机

    本文实例为大家分享了Python自动上京东抢手机的具体代码,供大家参考,具体内容如下 上次抢荣耀V9,被京东给恶心到了,所以就写了个简单的Python来自动抢V9.虽然用的是比较蠢的方法,但觉得还是有 ...

  5. python京东抢购手机攻略_Python实现自动上京东抢手机

    本文实例为大家分享了python自动上京东抢手机的具体代码,供大家参考,具体内容如下 上次抢荣耀V9,被京东给恶心到了,所以就写了个简单的Python来自动抢V9.虽然用的是比较蠢的方法,但觉得还是有 ...

  6. python写自动抢购脚本_Python实现自动上京东抢手机

    本文实例为大家分享了Python自动上京东抢手机的具体代码,供大家参考,具体内容如下 上次抢荣耀V9,被京东给恶心到了,所以就写了个简单的Python来自动抢V9.虽然用的是比较蠢的方法,但觉得还是有 ...

  7. python 抢购小米_Python(Tornado)模拟登录小米抢手机

    今天看到同事参与小米的抢购,几经数个星期的尝试,终于抢到了一台小米电视--看了一下小米的抢购流程,似乎可以用程序可破.于是想写点东西玩玩(你懂的--),第一步肯定是先得模拟登录小米帐号,当练手吧. 用 ...

  8. python 网站发送验证码_Python爬虫模拟登录带验证码网站

    爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法.python提供了强大的url库,想做到这个并不难.这里以登录学校教务系统为例,做一个简单的例子. 首先得明白cookie的作用, ...

  9. python 12306登录_python爬虫--模拟12306登录

    模拟12306登录 超级鹰: #!/usr/bin/env python # coding:utf-8 import requests from hashlib import md5 class Ch ...

最新文章

  1. tf.nn.softmax_cross_entropy_with_logits中的“logits”到底是个什么意思?
  2. php 长短字符串转换,将php的数组按照字符串长短进行排序
  3. Weblogic IIOP反序列化漏洞(CVE-2020-2551) 漏洞分析
  4. TCP 滑动窗口协议
  5. positionnbsp;absolutenbsp;relativenbsp;z-index
  6. php5.6.16,OSX 10.11 中重新编译PHP5.6.16问题
  7. 再次实践 MySQL chart - 每天5分钟玩转 Docker 容器技术(166)
  8. php常量变量连接,PHP常量及变量区别原理详解
  9. 前端学习(3266):js中this的指向
  10. html/css题库,DIV+CSS题库
  11. oracle报无效月份 注册表,在oracle中插入时间时出现“无效的月份”解决方法
  12. 简述事件接口与事件适配器的联系与区别_通过Redis学习事件驱动设计
  13. Mysql漏洞修复方法思路及注意事项
  14. JAVA CLASS混淆工具:Allatori 简单试用
  15. dbmsjobs记录表 oracle_【Oracle学习笔记】定时任务(dbms_job)
  16. Ubuntu18.04TLS运行linux版百度网盘客户端的问题
  17. 面试被问“你未来的职业规划是什么”,怎样回答最完美?
  18. There was a problem confirming the ssl certificate: HTTPSConnectionPool(host=‘pypi.org‘,port=443)
  19. 第三人称计算机获奖感言,个人获奖感言50字第三人称
  20. 为什么苹果6没有录屏_苹果iPad为什么没有计算器应用程序

热门文章

  1. Python实现软件自动登录超时锁屏
  2. Golang设计模式——15策略模式
  3. 单例设计模式-学习笔记
  4. Layui+ssm模糊查询
  5. 认真做好你的时间管理
  6. durango服务器维护,Durango狂野大陆
  7. 那些年曾看过的动漫(谨以此记录我的动漫历程)
  8. 从零开始学数据结构和算法:微信小程序的事件处理,实战解析
  9. Docker基于Docker-cpmpose搭建Nginx实现SpringBoot+Nginx集群
  10. 安卓高德地图聚合点击事件_滴滴接入第三方平台服务商,试水聚合,又是一场新的运力争夺?...