Skip requests when userid invalid (#6723)

This commit is contained in:
HDDolby
2026-09-18 10:35:58 +08:00
committed by GitHub
parent c2a232dec7
commit 4a22760bb4
2 changed files with 70 additions and 6 deletions

View File

@@ -183,6 +183,17 @@ class SiteParserBase(metaclass=ABCMeta):
"""
return size_tools.parse_size(text)
def _has_valid_userid(self) -> bool:
"""
判断用户 ID 是否存在且有效,避免空 ID 触发站点的无效详情/做种请求。
"""
if self.userid is None:
return False
if isinstance(self.userid, str):
user_id = self.userid.strip()
return bool(user_id) and user_id != "0"
return bool(self.userid) and self.userid != 0
def parse(self):
"""
解析站点信息
@@ -216,13 +227,16 @@ class SiteParserBase(metaclass=ABCMeta):
self._parse_user_base_info(self._index_html)
# 解析用户详细信息
if self._user_detail_page:
self._parse_user_detail_info(
self._get_page_content(
url=urljoin(self._base_url, self._user_detail_page),
params=self._user_detail_params,
headers=self._user_detail_headers
if not self._has_valid_userid():
logger.warn(f"{self._site_name} 未解析到有效用户 ID,跳过用户详情页请求")
else:
self._parse_user_detail_info(
self._get_page_content(
url=urljoin(self._base_url, self._user_detail_page),
params=self._user_detail_params,
headers=self._user_detail_headers
)
)
)
# 解析用户未读消息
if get_runtime_setting('SITE_MESSAGE'):
self._pase_unread_msgs()
@@ -291,6 +305,9 @@ class SiteParserBase(metaclass=ABCMeta):
解析做种页面
"""
if self._torrent_seeding_page:
if not self._has_valid_userid():
logger.warn(f"{self._site_name} 未解析到有效用户 ID,跳过做种信息请求")
return
# 第一页
next_page = self._parse_user_torrent_seeding_info(
self._get_page_content(

View File

@@ -66,3 +66,50 @@ def test_hddolby_reads_message_body_via_nexus_when_cookie_present(monkeypatch):
assert head == "测试标题"
assert date == "2026-07-21 10:00:00"
assert content == "测试正文"
def test_parser_skips_detail_and_seeding_requests_without_valid_userid(monkeypatch):
class DummyParser(HDDolbySiteUserInfo):
def _parse_site_page(self, html_text: str):
self._user_detail_page = "userdetails.php?id="
self._user_basic_page = None
self._user_traffic_page = None
self._torrent_seeding_page = "getusertorrentlistajax.php?userid="
def _parse_user_base_info(self, html_text: str):
self.userid = None
def _parse_user_traffic_info(self, html_text: str):
raise AssertionError("should not request traffic page without valid userid")
def _parse_user_torrent_seeding_info(self, html_text: str, multi_page: bool = False):
raise AssertionError("should not request seeding list without valid userid")
def _parse_logged_in(self, html_text):
return True
def _parse_message_unread_links(self, html_text: str, msg_links: list):
return None
def _parse_message_content(self, html_text):
return None, None, None
parser = DummyParser(
site_name="高清杜比",
url="https://www.hddolby.com/",
site_cookie="",
apikey="test-api-key",
token=None,
)
calls = []
def fake_get_page_content(**kwargs):
calls.append(kwargs.get("url", ""))
return ""
monkeypatch.setattr(parser, "_get_page_content", fake_get_page_content)
parser.parse()
assert not any("userdetails.php?id=" in call for call in calls)
assert not any("getusertorrentlistajax.php?userid=" in call for call in calls)