From e426dba46605e41daefe363fe1229454afec9ba2 Mon Sep 17 00:00:00 2001 From: Faker Date: Sun, 26 Jan 2025 16:31:00 +0800 Subject: [PATCH] update --- jd_taskop.py | 218 ++++++++++++++++++++++++++++++++++++++++++ jd_wsck.py | 30 ++++-- jd_wskey.py | 262 +++++++++++++++++++++++++++++++++++---------------- 3 files changed, 422 insertions(+), 88 deletions(-) create mode 100644 jd_taskop.py diff --git a/jd_taskop.py b/jd_taskop.py new file mode 100644 index 0000000..7ed80e9 --- /dev/null +++ b/jd_taskop.py @@ -0,0 +1,218 @@ +# -*- coding:utf-8 -*- +""" +cron: 15 2 * * * +new Env('重复任务优化'); +""" + +import json +import logging +import os +import sys,re +import time +import traceback + +import requests + +logger = logging.getLogger(name=None) # 创建一个日志对象 +logging.Formatter("%(message)s") # 日志内容格式化 +logger.setLevel(logging.INFO) # 设置日志等级 +logger.addHandler(logging.StreamHandler()) # 添加控制台日志 +# logger.addHandler(logging.FileHandler(filename="text.log", mode="w")) # 添加文件日志 + + +ipport = os.getenv("IPPORT") +if not ipport: + logger.info( + "如果报错请在环境变量中添加你的真实 IP:端口\n名称:IPPORT\t值:127.0.0.1:5700\n或在 config.sh 中添加 export IPPORT='127.0.0.1:5700'" + ) + ipport = "localhost:5700" +else: + ipport = ipport.lstrip("http://").rstrip("/") +sub_str = os.getenv("RES_SUB", "shufflewzc_faker2") +sub_list = sub_str.split("&") +res_only = os.getenv("RES_ONLY", True) +headers = { + "Accept": "application/json", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", +} + + +def load_send() -> None: + logger.info("加载推送功能中...") + global send + send = None + cur_path = os.path.abspath(os.path.dirname(__file__)) + sys.path.append(cur_path) + if os.path.exists(cur_path + "/notify.py"): + try: + from notify import send + except Exception: + send = None + logger.info(f"❌加载通知服务失败!!!\n{traceback.format_exc()}") + + +def get_tasklist() -> list: + tasklist = [] + t = round(time.time() * 1000) + url = f"http://{ipport}/api/crons?searchValue=&t={t}" + response = requests.get(url=url, headers=headers) + datas = json.loads(response.content.decode("utf-8")) + if datas.get("code") == 200: + try: + tasklist = datas.get("data").get("data") + except Exception: + tasklist = datas.get("data") + return tasklist + + +def filter_res_sub(tasklist: list) -> tuple: + filter_list = [] + res_list = [] + for task in tasklist: + for sub in sub_list: + if task.get("command").find(sub) == -1: + flag = False + else: + flag = True + break + if flag: + res_list.append(task) + else: + filter_list.append(task) + return filter_list, res_list + + +def get_index(lst: list, item: str) -> list: + return [index for (index, value) in enumerate(lst) if value == item] + + +def get_duplicate_list(tasklist: list) -> tuple: + logger.info("\n=== 第一轮初筛开始 ===") + + ids = [] + names = [] + cmds = [] + for task in tasklist: + ids.append(task.get("_id",task.get("id"))) + names.append(task.get("name")) + cmds.append(task.get("command")) + + name_list = [] + for i, name in enumerate(names): + if name not in name_list: + name_list.append(name) + + tem_tasks = [] + tem_ids = [] + dup_ids = [] + for name2 in name_list: + name_index = get_index(names, name2) + for i in range(len(name_index)): + if i == 0: + logger.info(f"【✅保留】{cmds[name_index[0]]}") + tem_tasks.append(tasklist[name_index[0]]) + tem_ids.append(ids[name_index[0]]) + else: + logger.info(f"【🚫禁用】{cmds[name_index[i]]}") + dup_ids.append(ids[name_index[i]]) + logger.info("") + + logger.info("=== 第一轮初筛结束 ===") + + return tem_ids, tem_tasks, dup_ids + + +def reserve_task_only( + tem_ids: list, tem_tasks: list, dup_ids: list, res_list: list +) -> list: + if len(tem_ids) == 0: + return tem_ids + + logger.info("\n=== 最终筛选开始 ===") + task3 = None + for task1 in tem_tasks: + for task2 in res_list: + if task1.get("name") == task2.get("name"): + dup_ids.append(task1.get("_id",task1.get("id"))) + logger.info(f"【✅保留】{task2.get('command')}") + task3 = task1 + if task3: + logger.info(f"【🚫禁用】{task3.get('command')}\n") + task3 = None + logger.info("=== 最终筛选结束 ===") + return dup_ids + + +def disable_duplicate_tasks(ids: list) -> None: + t = round(time.time() * 1000) + url = f"http://{ipport}/api/crons/disable?t={t}" + data = json.dumps(ids) + headers["Content-Type"] = "application/json;charset=UTF-8" + response = requests.put(url=url, headers=headers, data=data) + datas = json.loads(response.content.decode("utf-8")) + if datas.get("code") != 200: + logger.info(f"❌出错!!!错误信息为:{datas}") + else: + logger.info("🎉成功禁用重复任务~") + + +def get_token() -> str or None: + if os.path.exists("/ql/data/db/keyv.sqlite"): + path="/ql/data/db/keyv.sqlite" + elif os.path.exists("/ql/config/auth.json"): + path="/ql/config/auth.json" + elif os.path.exists("/ql/data/config/auth.json"): + path="/ql/data/config/auth.json" + + try: + if 'keyv' in path: + with open(path, "r", encoding="latin1") as file: + auth = file.read() + matches = re.search(r'token":"([^"]+)"', auth) + token = matches.group(1) + else: + with open(path, "r") as file: + auth = file.read() + auth = json.loads(auth) + token = auth["token"] + except Exception: + logger.info(f"❌无法获取 token!!!\n{traceback.format_exc()}") + send("禁用重复任务失败", "无法获取 token!!!") + exit(1) + return token + + +if __name__ == "__main__": + logger.info("===> 禁用重复任务开始 <===") + load_send() + token = get_token() + headers["Authorization"] = f"Bearer {token}" + + # 获取过滤后的任务列表 + sub_str = "\n".join(sub_list) + logger.info(f"\n=== 你选择过滤的任务前缀为 ===\n{sub_str}") + tasklist = get_tasklist() + if len(tasklist) == 0: + logger.info("❌无法获取 tasklist!!!") + exit(1) + filter_list, res_list = filter_res_sub(tasklist) + + tem_ids, tem_tasks, dup_ids = get_duplicate_list(filter_list) + # 是否在重复任务中只保留设置的前缀 + if res_only: + ids = reserve_task_only(tem_ids, tem_tasks, dup_ids, res_list) + else: + ids = dup_ids + logger.info("你选择保留除了设置的前缀以外的其他任务") + + sum = f"所有任务数量为:{len(tasklist)}" + filter = f"过滤的任务数量为:{len(res_list)}" + disable = f"禁用的任务数量为:{len(ids)}" + logging.info("\n=== 禁用数量统计 ===\n" + sum + "\n" + filter + "\n" + disable) + + if len(ids) == 0: + logger.info("😁没有重复任务~") + else: + disable_duplicate_tasks(ids) + #if send: + #send("💖禁用重复任务成功", f"\n{sum}\n{filter}\n{disable}") diff --git a/jd_wsck.py b/jd_wsck.py index b6ca03d..cc347f2 100644 --- a/jd_wsck.py +++ b/jd_wsck.py @@ -15,7 +15,7 @@ packages.urllib3.disable_warnings() from urllib.parse import unquote """ new Env('wskey本地转换'); -9 9 9 9 * jd_wsck.py +57 21,9 * * * jd_wsck.py by:lonesomexz """ hadsend=True @@ -253,7 +253,7 @@ def getcookie_wskey(key): #sign = get_sign_diy(pin) if not sign: continue - url = f"https://api.m.jd.com/client.action?functionId=genToken&{sign}" + url = f"http://api.m.jd.com/client.action?functionId=genToken&{sign}" headers = { "cookie": key, 'user-agent': UserAgent, @@ -441,7 +441,9 @@ def main(): if os.path.exists("/ql/config/auth.json"): config="/ql/config/auth.json" envtype="ql" - + if os.path.exists("/ql/data/db/keyv.sqlite"): + config="/ql/data/db/keyv.sqlite" + envtype="ql_latest" if os.path.exists("/ql/data/config/auth.json"): config="/ql/data/config/auth.json" envtype="ql" @@ -499,9 +501,21 @@ def main(): url = 'http://127.0.0.1:5678/openApi/count' headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer ', 'api-token': f'{token}'} datas = get(url, headers=headers).json()["data"]["accountCount"] - - # printf(f"token:{token}") - # printf(f"datas:{datas}") + elif envtype == "ql_latest": + with open(config, "r", encoding="latin1") as f1: + content = f1.read() + matches = re.search(r'token":"([^"]+)"', content) + try: + token = matches.group(1) + except Exception as e: + sys.exit(0) + url = 'http://127.0.0.1:5600/api/envs' + headers = {'Authorization': f'Bearer {token}'} + body = { + 'searchValue': 'JD_WSCK', + 'Authorization': f'Bearer {token}' + } + datas = get(url, params=body, headers=headers).json()['data'] if datas > 0 if isinstance(datas, int) else len(datas) > 0: @@ -510,7 +524,7 @@ def main(): printf("\n错误:没有需要转换的JD_WSCK,退出脚本!") return - if envtype == "ql": + if envtype in ('ql','ql_latest'): for data in datas: randomuserAgent() if data['status']!=0: @@ -527,7 +541,7 @@ def main(): else: newpin=getRemark(pin,token) if "fake_" in cookie: - message = f"pin为{newpin}的wskey过期了!" + message = f"{newpin}的wskey过期了!" printf(message) url = 'http://127.0.0.1:5600/api/envs/disable' try: diff --git a/jd_wskey.py b/jd_wskey.py index f0a71ad..8fb3d1c 100644 --- a/jd_wskey.py +++ b/jd_wskey.py @@ -1,20 +1,20 @@ # -*- coding: utf-8 -* ''' -定时自定义 -2 10 20 5 * jd_wskey.py new Env('wskey转换'); ''' - -import socket import base64 -import json -import os -import sys -import logging -import time -import re +import hashlib import hmac +import json +import logging +import os +import random +import re +import socket import struct +import sys +import time +import uuid WSKEY_MODE = 0 # 0 = Default / 1 = Debug! @@ -40,7 +40,7 @@ except Exception as err: logger.debug(str(err)) # 调试日志输出 logger.info("无推送文件") # 标准日志输出 -ver = 31207 # 版本号 +ver = 40904 # 版本号 def ttotp(key): @@ -52,6 +52,97 @@ def ttotp(key): return str(binary)[-6:].zfill(6) +def sign_core(par): + arr = [0x37, 0x92, 0x44, 0x68, 0xA5, 0x3D, 0xCC, 0x7F, 0xBB, 0xF, 0xD9, 0x88, 0xEE, 0x9A, 0xE9, 0x5A] + key2 = b"80306f4370b39fd5630ad0529f77adb6" + arr1 = [0 for _ in range(len(par))] + for i in range(len(par)): + r0 = int(par[i]) + r2 = arr[i & 0xf] + r4 = int(key2[i & 7]) + r0 = r2 ^ r0 + r0 = r0 ^ r4 + r0 = r0 + r2 + r2 = r2 ^ r0 + r1 = int(key2[i & 7]) + r2 = r2 ^ r1 + arr1[i] = r2 & 0xff + return bytes(arr1) + +def get_sign(functionId, body, uuid, client, clientVersion, st, sv): + all_arg = "functionId=%s&body=%s&uuid=%s&client=%s&clientVersion=%s&st=%s&sv=%s" % ( + functionId, body, uuid, client, clientVersion, st, sv) + ret_bytes = sign_core(str.encode(all_arg)) + info = hashlib.md5(base64.b64encode(ret_bytes)).hexdigest() + return info + +def base64Encode(string): + string1 = "KLMNOPQRSTABCDEFGHIJUVWXYZabcdopqrstuvwxefghijklmnyz0123456789+/" + string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + return base64.b64encode(string.encode("utf-8")).decode('utf-8').translate(str.maketrans(string1, string2)) + +def base64Decode(string): + string1 = "KLMNOPQRSTABCDEFGHIJUVWXYZabcdopqrstuvwxefghijklmnyz0123456789+/" + string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + stringbase = base64.b64decode(string.translate(str.maketrans(string1, string2))).decode('utf-8') + return stringbase + +def genJDUA(): + st = round(time.time() * 1000) + aid = base64Encode(''.join(str(uuid.uuid4()).split('-'))[16:]) + oaid = base64Encode(''.join(str(uuid.uuid4()).split('-'))[16:]) + ua = 'jdapp;android;11.1.4;;;appBuild/98176;ef/1;ep/{"hdid":"JM9F1ywUPwflvMIpYPok0tt5k9kW4ArJEU3lfLhxBqw=","ts":%s,"ridx":-1,"cipher":{"sv":"CJS=","ad":"%s","od":"%s","ov":"CzO=","ud":"%s"},"ciphertype":5,"version":"1.2.0","appname":"com.jingdong.app.mall"};Mozilla/5.0 (Linux; Android 12; M2102K1C Build/SKQ1.220303.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/97.0.4692.98 Mobile Safari/537.36' % (st, aid, oaid, aid) + return ua + +def genParams(): + suid = ''.join(str(uuid.uuid4()).split('-'))[16:] + buid = base64Encode(suid) + st = round(time.time() * 1000) + sv = random.choice(["102", "111", "120"]) + ep = json.dumps({ + "hdid": "JM9F1ywUPwflvMIpYPok0tt5k9kW4ArJEU3lfLhxBqw=", + "ts": st, + "ridx": -1, + "cipher": { + "area": "CV8yEJUzXzU0CNG0XzK=", + "d_model": "JWunCVVidRTr", + "wifiBssid": "dW5hbw93bq==", + "osVersion": "CJS=", + "d_brand": "WQvrb21f", + "screen": "CJuyCMenCNq=", + "uuid": buid, + "aid": buid, + "openudid": buid + }, + "ciphertype": 5, + "version": "1.2.0", + "appname": "com.jingdong.app.mall" + }).replace(" ", "") + body = '{"to":"https%3a%2f%2fplogin.m.jd.com%2fjd-mlogin%2fstatic%2fhtml%2fappjmp_blank.html"}' + sign = get_sign("genToken", body, suid, "android", "11.1.4", st, sv) + params = { + 'functionId': 'genToken', + 'clientVersion': '11.1.4', + 'build': '98176', + 'client': 'android', + 'partner': 'google', + 'oaid': suid, + 'sdkVersion': '31', + 'lang': 'zh_CN', + 'harmonyOs': '0', + 'networkType': 'UNKNOWN', + 'uemps': '0-2', + 'ext': '{"prstate": "0", "pvcStu": "1"}', + 'eid': 'eidAcef08121fds9MoeSDdMRQ1aUTyb1TyPr2zKHk5Asiauw+K/WvS1Ben1cH6N0UnBd7lNM50XEa2kfCcA2wwThkxZc1MuCNtfU/oAMGBqadgres4BU', + 'ef': '1', + 'ep': ep, + 'st': st, + 'sign': sign, + 'sv': sv + } + return params + + def ql_send(text): if "WSKEY_SEND" in os.environ and os.environ["WSKEY_SEND"] == 'disable': return True @@ -145,14 +236,24 @@ def ql_login() -> str: # 方法 青龙登录(获取Token 功能同上) path = '/ql/config/auth.json' # 设置青龙 auth文件地址 if not os.path.isfile(path): path = '/ql/data/config/auth.json' # 尝试设置青龙 auth 新版文件地址 - if os.path.isfile(path): # 进行文件真值判断 - with open(path, "r") as file: # 上下文管理 - auth = file.read() # 读取文件 - file.close() # 关闭文件 - auth = json.loads(auth) # 使用 json模块读取 - username = auth["username"] # 提取 username - password = auth["password"] # 提取 password - token = auth["token"] # 提取 authkey + if not os.path.isfile(path): + path_latest = '/ql/data/db/keyv.sqlite' # 尝试设置青龙 auth 新版文件地址 + if os.path.isfile(path) or os.path.isfile(path_latest): # 进行文件真值判断 + + if os.path.isfile(path): + with open(path, "r") as file: # 上下文管理 + auth = file.read() # 读取文件 + file.close() # 关闭文件 + auth = json.loads(auth) # 使用 json模块读取 + username = auth["username"] # 提取 username + password = auth["password"] # 提取 password + token = auth["token"] # 提取 authkey + else: + with open(path_latest, "r", encoding="latin1") as file: + auth = file.read() # 读取文件 + matches = re.search(r'token":"([^"]+)"', auth) + token = matches.group(1) + try: twoFactorSecret = auth["twoFactorSecret"] except Exception as err: @@ -237,7 +338,7 @@ def check_ck(ck) -> bool: # 方法 检查 Cookie有效性 使用变量传递 headers = { 'Cookie': ck, 'Referer': 'https://home.m.jd.com/myJd/home.action', - 'user-agent': ua + 'user-agent': genJDUA() } # 设置 HTTP头 try: res = requests.get(url=url, headers=headers, verify=False, timeout=10, @@ -267,23 +368,24 @@ def check_ck(ck) -> bool: # 方法 检查 Cookie有效性 使用变量传递 # 返回值 bool jd_ck def getToken(wskey): # 方法 获取 Wskey转换使用的 Token 由 JD_API 返回 这里传递 wskey - try: - url = str(base64.b64decode(url_t).decode()) + 'api/genToken' # 设置云端服务器地址 路由为 genToken - header = {"User-Agent": ua} # 设置 HTTP头 - params = requests.get(url=url, headers=header, verify=False, timeout=20).json() # 设置 HTTP请求参数 超时 20秒 Json解析 - except Exception as err: - logger.info("Params参数获取失败") # 标准日志输出 - logger.debug(str(err)) # 调试日志输出 - # return False, wskey # 返回 -> False[Bool], Wskey - return False # 返回 -> False[Bool], Wskey + # try: + # url = str(base64.b64decode(url_t).decode()) + 'api/genToken' # 设置云端服务器地址 路由为 genToken + # header = {"User-Agent": ua} # 设置 HTTP头 + # params = requests.get(url=url, headers=header, verify=False, timeout=20).json() # 设置 HTTP请求参数 超时 20秒 Json解析 + # except Exception as err: + # logger.info("Params参数获取失败") # 标准日志输出 + # logger.debug(str(err)) # 调试日志输出 + # # return False, wskey # 返回 -> False[Bool], Wskey + # return False # 返回 -> False[Bool], Wskey + params = genParams() headers = { 'cookie': wskey, 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', 'charset': 'UTF-8', 'accept-encoding': 'br,gzip,deflate', - 'user-agent': ua + 'user-agent': genJDUA() } # 设置 HTTP头 - url = 'https://api.m.jd.com/client.action' # 设置 URL地址 + url = 'http://api.m.jd.com/client.action' # 设置 URL地址 data = 'body=%7B%22to%22%3A%22https%253a%252f%252fplogin.m.jd.com%252fjd-mlogin%252fstatic%252fhtml%252fappjmp_blank.html%22%7D&' # 设置 POST 载荷 try: res = requests.post(url=url, params=params, headers=headers, data=data, verify=False, @@ -307,7 +409,7 @@ def appjmp(wskey, tokenKey): # 方法 传递 wskey & tokenKey # return False, wskey # 返回 -> False[Bool], Wskey return False # 返回 -> False[Bool], Wskey headers = { - 'User-Agent': ua, + 'User-Agent': genJDUA(), 'accept': 'accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'x-requested-with': 'com.jingdong.app.mall' } # 设置 HTTP头 @@ -476,52 +578,52 @@ def ql_insert(i_ck): # 方法 插入新变量 logger.info("\n账号添加失败\n--------------------\n") # 标准日志输出 -def cloud_info(): # 方法 云端信息 - url = str(base64.b64decode(url_t).decode()) + 'api/check_api' # 设置 URL地址 路由 [check_api] - for i in range(3): # For循环 3次 - try: - headers = {"authorization": "Bearer Shizuku"} # 设置 HTTP头 - res = requests.get(url=url, verify=False, headers=headers, timeout=20).text # HTTP[GET] 请求 超时 20秒 - except requests.exceptions.ConnectTimeout: - logger.info("\n获取云端参数超时, 正在重试!" + str(i)) # 标准日志输出 - time.sleep(1) # 休眠 1秒 - continue # 循环继续 - except requests.exceptions.ReadTimeout: - logger.info("\n获取云端参数超时, 正在重试!" + str(i)) # 标准日志输出 - time.sleep(1) # 休眠 1秒 - continue # 循环继续 - except Exception as err: - logger.info("\n未知错误云端, 退出脚本!") # 标准日志输出 - logger.debug(str(err)) # 调试日志输出 - sys.exit(1) # 脚本退出 - else: - try: - c_info = json.loads(res) # json读取参数 - except Exception as err: - logger.info("云端参数解析失败") # 标准日志输出 - logger.debug(str(err)) # 调试日志输出 - sys.exit(1) # 脚本退出 - else: - return c_info # 返回 -> c_info +# def cloud_info(): # 方法 云端信息 +# url = str(base64.b64decode(url_t).decode()) + 'api/check_api' # 设置 URL地址 路由 [check_api] +# for i in range(3): # For循环 3次 +# try: +# headers = {"authorization": "Bearer Shizuku"} # 设置 HTTP头 +# res = requests.get(url=url, verify=False, headers=headers, timeout=20).text # HTTP[GET] 请求 超时 20秒 +# except requests.exceptions.ConnectTimeout: +# logger.info("\n获取云端参数超时, 正在重试!" + str(i)) # 标准日志输出 +# time.sleep(1) # 休眠 1秒 +# continue # 循环继续 +# except requests.exceptions.ReadTimeout: +# logger.info("\n获取云端参数超时, 正在重试!" + str(i)) # 标准日志输出 +# time.sleep(1) # 休眠 1秒 +# continue # 循环继续 +# except Exception as err: +# logger.info("\n未知错误云端, 退出脚本!") # 标准日志输出 +# logger.debug(str(err)) # 调试日志输出 +# sys.exit(1) # 脚本退出 +# else: +# try: +# c_info = json.loads(res) # json读取参数 +# except Exception as err: +# logger.info("云端参数解析失败") # 标准日志输出 +# logger.debug(str(err)) # 调试日志输出 +# sys.exit(1) # 脚本退出 +# else: +# return c_info # 返回 -> c_info -def check_cloud(): - url_list = ['aHR0cHM6Ly9hcGkubW9tb2UubGluay8=', 'aHR0cHM6Ly9hcGkubGltb2UuZXUub3JnLw==', - 'aHR0cHM6Ly9hcGkuaWxpeWEuY2Yv'] - for i in url_list: - url = str(base64.b64decode(i).decode()) # 设置 url地址 [str] - try: - requests.get(url=url, verify=False, timeout=10) # HTTP[GET]请求 超时 10秒 - except Exception as err: - logger.debug(str(err)) # 调试日志输出 - continue # 循环继续 - else: # 分支判断 - info = ['HTTPS', 'Eu_HTTPS', 'CloudFlare'] # 输出信息[List] - logger.info(str(info[url_list.index(i)]) + " Server Check OK\n--------------------\n") # 标准日志输出 - return i # 返回 ->i - logger.info("\n云端地址全部失效, 请检查网络!") # 标准日志输出 - ql_send('云端地址失效. 请联系作者或者检查网络.') # 推送消息 - sys.exit(1) # 脚本退出 +# def check_cloud(): +# url_list = ['aHR0cHM6Ly9hcGkubW9tb2UubGluay8=', 'aHR0cHM6Ly9hcGkubGltb2UuZXUub3JnLw==', +# 'aHR0cHM6Ly9hcGkuaWxpeWEuY2Yv'] +# for i in url_list: +# url = str(base64.b64decode(i).decode()) # 设置 url地址 [str] +# try: +# requests.get(url=url, verify=False, timeout=10) # HTTP[GET]请求 超时 10秒 +# except Exception as err: +# logger.debug(str(err)) # 调试日志输出 +# continue # 循环继续 +# else: # 分支判断 +# info = ['HTTPS', 'Eu_HTTPS', 'CloudFlare'] # 输出信息[List] +# logger.info(str(info[url_list.index(i)]) + " Server Check OK\n--------------------\n") # 标准日志输出 +# return i # 返回 ->i +# logger.info("\n云端地址全部失效, 请检查网络!") # 标准日志输出 +# ql_send('云端地址失效. 请联系作者或者检查网络.') # 推送消息 +# sys.exit(1) # 脚本退出 def check_port(): # 方法 检查变量传递端口 @@ -543,10 +645,10 @@ if __name__ == '__main__': # Python主函数执行入口 ql_session = requests.session() token = ql_login() # 调用方法 [ql_login] 并赋值 [token] ql_id = check_id() - url_t = check_cloud() - cloud_arg = cloud_info() - update() - ua = cloud_arg['User-Agent'] + # url_t = check_cloud() + # cloud_arg = cloud_info() + # update() + # ua = cloud_arg['User-Agent'] wslist = get_wskey() envlist = get_env() sleepTime = int(os.environ.get("WSKEY_SLEEP", "10") if str(os.environ.get("WSKEY_SLEEP")).isdigit() else "10")