diff --git a/env.docker.py.example b/env.docker.py.example index 4bb5fe8..1ce8d78 100644 --- a/env.docker.py.example +++ b/env.docker.py.example @@ -28,7 +28,8 @@ QUERY_JOB_THREAD_ENABLED = 0 # 是否开启多线程查询,开启后第个任 # 打码平台账号 # 目前只支持免费打码接口 和 若快打码,注册地址:http://www.ruokuai.com/login -AUTO_CODE_PLATFORM = 'free' # 免费填写 free 若快 ruokuai # 免费打码无法保证持续可用,如失效请手动切换 +AUTO_CODE_PLATFORM = 'free' # 免费填写 free 若快 ruokuai # 免费打码无法保证持续可用,如失效请手动切换 #个人本地打码填写 user,并修改 API_USER_CODE_QCR_API +API_USER_CODE_QCR_API = '' AUTO_CODE_ACCOUNT = { 'user': 'your user name', 'pwd': 'your password' diff --git a/env.py.example b/env.py.example index 834460d..b17cb17 100644 --- a/env.py.example +++ b/env.py.example @@ -28,7 +28,8 @@ QUERY_JOB_THREAD_ENABLED = 0 # 是否开启多线程查询,开启后第个任 # 打码平台账号 # 目前只支持免费打码接口 和 若快打码,注册地址:http://www.ruokuai.com/login -AUTO_CODE_PLATFORM = 'free' # 免费填写 free 若快 ruokuai # 免费打码无法保证持续可用,如失效请手动切换 +AUTO_CODE_PLATFORM = 'free' # 免费填写 free 若快 ruokuai # 免费打码无法保证持续可用,如失效请手动切换; 个人打码填写 user 并修改API_USER_CODE_QCR_API 为自己地址 +API_USER_CODE_QCR_API = '' AUTO_CODE_ACCOUNT = { # 使用 free 可用省略 'user': 'your user name', 'pwd': 'your password' @@ -109,6 +110,11 @@ WEB_PORT = 8008 # 监听端口 CDN_ENABLED = 0 CDN_CHECK_TIME_OUT = 1 # 检测单个 cdn 是否可用超时时间 +# 是否使用浏览器缓存中的RAIL_EXPIRATION 和 RAIL_DEVICEID +CACHE_RAIL_ID_ENABLED = 0 +RAIL_EXPIRATION = '' #浏览12306 网站中的Cache的RAIL_EXPIRATION 值 +RAIL_DEVICEID = '' #浏览12306 网站中的Cache的RAIL_DEVICEID 值 + # 查询任务 QUERY_JOBS = [ { diff --git a/py12306/app.py b/py12306/app.py index 4bf5317..c7bcf03 100644 --- a/py12306/app.py +++ b/py12306/app.py @@ -81,7 +81,7 @@ class App: @classmethod def check_auto_code(cls): - if Config().AUTO_CODE_PLATFORM == 'free': return True + if Config().AUTO_CODE_PLATFORM == 'free' or Config().AUTO_CODE_PLATFORM == 'user': return True if not Config().AUTO_CODE_ACCOUNT.get('user') or not Config().AUTO_CODE_ACCOUNT.get('pwd'): return False return True diff --git a/py12306/config.py b/py12306/config.py index e1b203f..eb88c36 100644 --- a/py12306/config.py +++ b/py12306/config.py @@ -22,6 +22,8 @@ class Config: QUERY_JOB_THREAD_ENABLED = 0 # 打码平台账号 AUTO_CODE_PLATFORM = '' + #用户打码平台地址 + API_USER_CODE_QCR_API = '' AUTO_CODE_ACCOUNT = {'user': '', 'pwd': ''} # 输出日志到文件 OUT_PUT_LOG_TO_FILE_ENABLED = 0 @@ -94,6 +96,10 @@ class Config: CDN_ITEM_FILE = PROJECT_DIR + 'data/cdn.txt' CDN_ENABLED_AVAILABLE_ITEM_FILE = QUERY_DATA_DIR + 'available.json' + CACHE_RAIL_ID_ENABLED = 0 + RAIL_EXPIRATION = '' + RAIL_DEVICEID = '' + # Default time out TIME_OUT_OF_REQUEST = 5 @@ -213,6 +219,10 @@ class Config: def is_cdn_enabled(): return Config().CDN_ENABLED + @staticmethod + def is_cache_rail_id_enabled(): + return Config().CACHE_RAIL_ID_ENABLED + class EnvLoader: envs = [] diff --git a/py12306/helpers/OCR.py b/py12306/helpers/OCR.py index a20f6bd..d124a08 100644 --- a/py12306/helpers/OCR.py +++ b/py12306/helpers/OCR.py @@ -25,7 +25,7 @@ class OCR: :return: """ self = cls() - if Config().AUTO_CODE_PLATFORM == 'free': + if Config().AUTO_CODE_PLATFORM == 'free' or Config().AUTO_CODE_PLATFORM == 'user': return self.get_image_by_free_site(img) return self.get_img_position_by_ruokuai(img) @@ -58,7 +58,10 @@ class OCR: data = { 'img': img } - response = self.session.post(API_FREE_CODE_QCR_API, data=data, timeout=30) + if Config().AUTO_CODE_PLATFORM == 'free': + response = self.session.post(API_FREE_CODE_QCR_API, data=data, timeout=30) + else: + response = self.session.post(Config().API_USER_CODE_QCR_API, data=data, timeout=30) result = response.json() if result.get('msg') == 'success': pos = result.get('result') diff --git a/py12306/user/job.py b/py12306/user/job.py index 1d0f5c1..459690c 100644 --- a/py12306/user/job.py +++ b/py12306/user/job.py @@ -197,10 +197,16 @@ class UserJob: 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'), - }) + if not Config().is_cache_rail_id_enabled(): + self.session.cookies.update({ + 'RAIL_EXPIRATION': result.get('exp'), + 'RAIL_DEVICEID': result.get('dfp'), + }) + else: + self.session.cookies.update({ + 'RAIL_EXPIRATION': Config().RAIL_EXPIRATION, + 'RAIL_DEVICEID': Config().RAIL_DEVICEID, + }) except: return False