From 5d0b14ce85bdc176987b1f04752784560b2ace7f Mon Sep 17 00:00:00 2001 From: Jalin Date: Sat, 12 Oct 2019 15:26:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=99=BB=E5=BD=95=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E9=94=99=E8=AF=AF=20#155?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- py12306/helpers/api.py | 2 +- py12306/user/job.py | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/py12306/helpers/api.py b/py12306/helpers/api.py index c489f88..9d257c9 100644 --- a/py12306/helpers/api.py +++ b/py12306/helpers/api.py @@ -41,7 +41,7 @@ API_CONFIRM_SINGLE_FOR_QUEUE = BASE_URL_OF_12306 + '/otn/confirmPassenger/confir API_QUERY_ORDER_WAIT_TIME = BASE_URL_OF_12306 + '/otn/confirmPassenger/queryOrderWaitTime?{}' # 排队查询 API_QUERY_INIT_PAGE = BASE_URL_OF_12306 + '/otn/leftTicket/init' # API_GET_BROWSER_DEVICE_ID = BASE_URL_OF_12306 + '/otn/HttpZF/logdevice' -API_GET_BROWSER_DEVICE_ID = 'https://12306-rail-id.pjialin.com/' +API_GET_BROWSER_DEVICE_ID = 'https://12306-rail-id-v2.pjialin.com/' API_FREE_CODE_QCR_API = 'https://12306-ocr.pjialin.com/check/' API_NOTIFICATION_BY_VOICE_CODE = 'http://ali-voice.showapi.com/sendVoice?' diff --git a/py12306/user/job.py b/py12306/user/job.py index 9d7d95e..b0a764c 100644 --- a/py12306/user/job.py +++ b/py12306/user/job.py @@ -123,9 +123,9 @@ class UserJob: 'password': self.password, 'appid': 'otn' } - self.request_device_id() answer = AuthCode.get_auth_code(self.session) data['answer'] = answer + self.request_device_id() response = self.session.post(API_BASE_LOGIN.get('url'), data) result = response.json() if result.get('result_code') == 0: # 登录成功 @@ -185,11 +185,19 @@ class UserJob: if response.status_code == 200: try: result = json.loads(response.text) - self.session.cookies.update(result) - # self.session.cookies.update({ - # 'RAIL_EXPIRATION': '', - # 'RAIL_DEVICEID': '', - # }) + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" + } + from base64 import b64decode + self.session.headers.update(headers) + response = self.session.get(b64decode(result['id']).decode()) + if response.text.find('callbackFunction') >= 0: + result = response.text[18:-2] + result = json.loads(result) + self.session.cookies.update({ + 'RAIL_EXPIRATION': result.get('exp'), + 'RAIL_DEVICEID': result.get('dfp'), + }) except: return False @@ -399,6 +407,6 @@ class UserJob: self.ticket_info_for_passenger_form = json.loads(form.groups()[0].replace("'", '"')) self.order_request_dto = json.loads(order.groups()[0].replace("'", '"')) except: - return False # TODO Error + return False # TODO Error return True