"Phb优化外部Cookie导入逻辑,支持从extendDict或远程URL动态加载Cookie配置"

This commit is contained in:
Wang.Luo 2025-06-03 01:54:18 +08:00
parent 211220f016
commit 1ef2c56330
2 changed files with 58 additions and 12 deletions

View File

@ -54,19 +54,62 @@ class Spider(Spider):
self.session.proxies.update(self.proxies)
self.session.headers.update(self.headers)
# ====== 在这里处理并传入指定的 Cookie ======
# 你提供的 Cookie 字符串
cookie_string = "KEY=2800769*3022907:116762244:2236104702:1; platform=mobile; ss=830813246555776814; sessid=300353306947678113; comp_detect-cookies=13166.100000; fg_afaf12e4c5419a855dd0bf120670f=41719.100000; fg_757a7e3b2b97e62caeae14647b10ab8a=62682.100000; fg_63bebf99a35b4f802b2ee7589fece7c6=48941.100000; fg_7d466c3b3b825a5e5f974868b9d87c01=43396.100000; fg_7d31324eedb583147b6dcbea0051c868=81750.100000; __s=683BD997-42FE722901BB234E92-52ADB4D; __l=683BD997-42FE722901BB234E92-52ADB4D; _ga=GA1.1.865788991.1748752797; accessAgeDisclaimerPH=1; googtrans=/auto/zh-CN; googtrans=/auto/zh-CN; ua=5088e51afb755e3294a3359f17dd8eee; il=v11msoKzX_h0h258sWpnEAzxOpywRHt3No__oI88GHuIUxNzY0Njk2NzIzOVY2Q1c2d2l2eGp4T19pOW5CVV9JSU1FQ0NGWW01YWlLNnZ5Y251LQ..; cookieConsent=2; bs=e1649232670c3a49db241055d6ccf891; bsdd=e1649232670c3a49db241055d6ccf891; htjf-mobile=3; tj_UUID=ChBNOIxil6REvZRCDWP3pmmCEgwIjYi1vgYQmfiBowEYASIgZTE2NDkyMzI2NzBjM2E0OWRiMjQxMDU1ZDZjY2Y4OTE=; tj_UUID_v2=ChBNOIxil6REvZRCDWP3pmmCEgwIjYi1vgYQmfiBowEYASIgZTE2NDkyMzI2NzBjM2E0OWRiMjQxMDU1ZDZjY2Y4OTE=; _ga_B39RFFWGYY=GS2.1.s1748884900$o2$g1$t1748885526$j58$l0$h0"
# --- 外部导入 Cookie 逻辑开始 ---
raw_cookie_data = '' # 用于暂存获取到的原始 cookie 数据
# 将 Cookie 字符串解析为字典
parsed_cookies = {}
for part in cookie_string.split('; '):
if '=' in part:
key, value = part.split('=', 1) # 只在第一个等号处分割,因为值可能包含等号
parsed_cookies[key.strip()] = value.strip() # strip() 用于去除可能存在的空格
# 1. 从 extendDict 中尝试获取 'cookie' 字段
if 'cookie' in self.proxies: # self.proxies 实际上就是 extendDict
raw_cookie_data = self.proxies['cookie']
self.session.cookies.update(parsed_cookies)
# ==================================
# 2. 如果 extendDict 中有 'json' 字段,从该 URL 获取 JSON 并提取 cookie
if 'json' in self.proxies:
try:
# 注意:这里假设 self.fetch 是一个已有的方法来执行请求
# 如果没有,你需要替换为 requests.get() 或其他请求方式
r = requests.get(self.proxies['json'], timeout=10, proxies=self.proxies, headers=self.headers)
r.raise_for_status() # 检查请求是否成功
if 'cookie' in r.json():
raw_cookie_data = r.json()['cookie']
except Exception as e:
print(f"从 JSON URL 获取 Cookie 失败: {e}")
raw_cookie_data = '' # 获取失败则清空
# 3. 如果 raw_cookie_data 是一个 URL (http/https开头),则请求该 URL 获取纯文本 Cookie
if isinstance(raw_cookie_data, str) and raw_cookie_data.startswith('http'):
try:
r = requests.get(raw_cookie_data, timeout=10, proxies=self.proxies, headers=self.headers)
r.raise_for_status()
raw_cookie_data = r.text.strip()
except Exception as e:
print(f"从纯文本 URL 获取 Cookie 失败: {e}")
raw_cookie_data = ''
# 4. 将获取到的原始 Cookie 数据解析并更新到 session 中
# 如果 raw_cookie_data 仍然为空或 '{}',则不处理
if raw_cookie_data and raw_cookie_data != '{}':
cookies_to_set = {}
if isinstance(raw_cookie_data, dict):
# 如果直接是字典类型,直接使用
cookies_to_set = raw_cookie_data
elif isinstance(raw_cookie_data, str):
try:
# 尝试解析为 JSON 字典 (例如 {"name": "value"})
cookies_to_set = json.loads(raw_cookie_data)
except json.JSONDecodeError:
# 如果不是 JSON尝试按字符串格式解析 (例如 "name1=value1; name2=value2")
for part in raw_cookie_data.split('; '):
if '=' in part:
key, value = part.split('=', 1)
cookies_to_set[key.strip()] = value.strip()
if cookies_to_set:
self.session.cookies.update(cookies_to_set)
print("Cookie 已成功加载并更新到会话。")
else:
print("未解析到有效的 Cookie 数据。")
else:
print("未指定外部 Cookie 或 Cookie 数据为空。")
# --- 外部导入 Cookie 逻辑结束 ---
pass

View File

@ -2240,7 +2240,10 @@
"api": "./PyramidStore/plugin/adult/Phb.py",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
"filterable": 1,
"ext": {
"cookie": "http://127.0.0.1:9978/file/TVBox/phb_cookie.txt"
}
},
{
"key": "xhamster",