關於搶火車票的那些事兒(三)
阿新 • • 發佈:2018-11-08
關於搶火車票的那些事兒(三)
上一節 中我們順利登陸了12306,但是你以為這樣就順利登陸了?
那麼你就錯了。。
上一節我們收到了資料 {'result_message': '登入成功', 'result_code': 0, 'uamtk': 'g-lT6rQ5XVZsZUTOKyohI46jpJR38fma2_IBxdAfyX8-bS6ldq4140'} 'uamtk'看起來這麼複雜,應該是有用的? 是的,這個在我們的第一次驗證裡要用到,這是一個環環相扣的過程、
Step1: 用 uamtk做Cookie去做第一次驗證。 Fiddler捕捉登陸後的第一次驗證過程:
Step2:
向驗證url Post 第一步驗證返回給我們的資料,可以參考以下程式碼:
恭喜你,這次是真正成功登陸了~
上一節我們收到了資料 {'result_message': '登入成功', 'result_code': 0, 'uamtk': 'g-lT6rQ5XVZsZUTOKyohI46jpJR38fma2_IBxdAfyX8-bS6ldq4140'} 'uamtk'看起來這麼複雜,應該是有用的? 是的,這個在我們的第一次驗證裡要用到,這是一個環環相扣的過程、
Step1: 用 uamtk做Cookie去做第一次驗證。 Fiddler捕捉登陸後的第一次驗證過程:
這樣我們會得到第一步驗證的結果 這時我們會看到收到的回覆資料表示我們第一次驗證通過了,同時我們看到apptk這個欄位好像還要用的樣子。 沒錯,我們第二次驗證的時候需要它。self.session.cookies['uamtk'] = loginResult['uamtk'] #4 使用者登入第一次驗證+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ url = message.firstLoginVerifyUrl data = { 'appid': 'otn' } response = self.session.post(url, data=data,) userVerify = response.json() print('第一次驗證') print(userVerify) if userVerify['result_code'] != 0: print('驗證失敗(uamtk) code:{}'.format(userVerify['result_code']))
Step2:
Fiddler捕捉登陸後的第二次驗證過程:
向驗證url Post 第一步驗證返回給我們的資料,可以參考以下程式碼:
這時候我們會收到驗證通過的資料:def secLoginVerify(self,newapptk): print('第二次驗證') newAppTkErrorCount = 0 url = message.secLoginVerifyUrl data = { 'tk': newapptk } while True: if newAppTkErrorCount > 15: print('newAppTk獲取失敗,退出程式') sys.exit() response = self.session.post(url, data = data) try: verifyResult = response.json() print(verifyResult) return verifyResult except: #json.decoder.JSONDecodeError: newAppTkErrorCount += 1
恭喜你,這次是真正成功登陸了~