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

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

用 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月),后续小米那边可能会改变一些规则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Tornado是一个用于构建高性能Web应用的异步框架。它基于事件循环和非阻塞IO的特性,可以处理大量并发连接,适用于实时应用程序和长轮询服务。在使用Tornado框架时,可以通过导入tornado.ioloop和tornado.web模块来创建应用程序。引用中的代码展示了一个简单的Tornado应用程序的快速入门示例。该示例创建了一个名为MainHandler的处理程序,当访问路径为/index时,会返回"Hello, world"。应用程序监听在8888端口上,并通过tornado.ioloop.IOLoop.instance().start()方法来启动运行。 除了快速入门示例,还可以通过引用中提供的链接来学习更多关于Python Tornado的项目实践。引用中的代码展示了一个更复杂的Tornado应用程序示例。该示例使用了自定义的模板路径和渲染页面的方式,将请求路由到MainHandler处理程序,并在访问路径为/index时渲染home/index.html页面。应用程序监听在80端口上,并通过tornado.ioloop.IOLoop.instance().start()方法来启动运行。 总而言之,Python Tornado是一个强大的异步框架,可以用于构建高性能的Web应用。通过学习快速入门示例和项目实践,可以更好地理解和使用Tornado框架。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Pythontornado](https://blog.csdn.net/banzhi8397/article/details/101392895)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [python tornado](https://download.csdn.net/download/yun12315000/10510234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python开发之Tornado](https://blog.csdn.net/Dr_BigJoe/article/details/105206923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值