@@ -1005,10 +1005,51 @@ def raise_if_resp_should_retry(self, resp):
10051005 ExceptionTool .raises_resp (f'响应无数据!request_url=[{ url } ]' , resp )
10061006
10071007 def after_init (self ):
1008+ # 自动更新禁漫API域名
1009+ if JmModuleConfig .FLAG_API_CLIENT_AUTO_UPDATE_DOMAIN :
1010+ self .update_api_domain ()
1011+
10081012 # 保证拥有cookies,因为移动端要求必须携带cookies,否则会直接跳转同一本子【禁漫娘】
10091013 if JmModuleConfig .FLAG_API_CLIENT_REQUIRE_COOKIES :
10101014 self .ensure_have_cookies ()
10111015
1016+ client_update_domain_lock = Lock ()
1017+
1018+ def update_api_domain (self ):
1019+ if True is JmModuleConfig .FLAG_API_CLIENT_AUTO_UPDATE_DOMAIN_DONE :
1020+ return
1021+
1022+ with self .client_update_domain_lock :
1023+ if True is JmModuleConfig .FLAG_API_CLIENT_AUTO_UPDATE_DOMAIN_DONE :
1024+ return
1025+ try :
1026+ # 获取域名列表
1027+ resp = self .postman .get (JmModuleConfig .API_URL_DOMAIN_SERVER )
1028+ res_json = JmCryptoTool .decode_resp_data (resp .text , '' , JmMagicConstants .API_DOMAIN_SERVER_SECRET )
1029+ res_data = json_loads (res_json )
1030+
1031+ # 检查返回值
1032+ if not res_data .get ('Server' , None ):
1033+ jm_log ('api.update_domain.empty' ,
1034+ f'获取禁漫最新API域名失败, 返回值: { res_json } ' )
1035+ return
1036+ new_server_list : list [str ] = res_data ['Server' ]
1037+ old_server_list = JmModuleConfig .DOMAIN_API_LIST
1038+ jm_log ('api.update_domain.success' ,
1039+ f'获取到最新的API域名,替换jmcomic内置域名:(new){ new_server_list } ---→ (old){ old_server_list } '
1040+ )
1041+ # 更新域名
1042+ if self .domain_list is old_server_list :
1043+ self .domain_list = new_server_list
1044+ JmModuleConfig .DOMAIN_API_LIST = new_server_list
1045+ except Exception as e :
1046+ jm_log ('api.update_domain.error' ,
1047+ f'自动更新API域名失败,仍使用jmcomic内置域名。'
1048+ f'可通过代码[JmModuleConfig.FLAG_API_CLIENT_AUTO_UPDATE_DOMAIN=False]关闭自动更新API域名. 异常: { e } '
1049+ )
1050+ finally :
1051+ JmModuleConfig .FLAG_API_CLIENT_AUTO_UPDATE_DOMAIN_DONE = True
1052+
10121053 client_init_cookies_lock = Lock ()
10131054
10141055 def ensure_have_cookies (self ):
0 commit comments