国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python(Tornado)模擬登錄小米搶手機

2019-11-25 18:38:03
字體:
來源:轉載
供稿:網友
今天看到同事參與小米的搶購,幾經數個星期的嘗試,終于搶到了一臺小米電視……看了一下小米的搶購流程,似乎可以用程序可破。于是想寫點東西玩玩(你懂的……),第一步肯定是先得模擬登錄小米帳號,當練手吧。
用 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月),后續小米那邊可能會改變一些規則。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宝丰县| 澜沧| 东丰县| 徐汇区| 无极县| 克什克腾旗| 平泉县| 老河口市| 乌鲁木齐县| 舟山市| 浏阳市| 连州市| 个旧市| 府谷县| 唐海县| 墨玉县| 万荣县| 辽宁省| 高平市| 府谷县| 亳州市| 和顺县| 循化| 泗阳县| 杨浦区| 汉中市| 铜鼓县| 申扎县| 突泉县| 湘西| 威信县| 保德县| 丰镇市| 瓦房店市| 淮北市| 吉首市| 大厂| 香河县| 衡山县| 襄汾县| 贵溪市|