From 3ea745e058364017dc62e8f49331c0d9d750eeb2 Mon Sep 17 00:00:00 2001 From: kosmo888 <268954352+kosmo888@users.noreply.github.com> Date: Sun, 13 Sep 2026 04:06:38 +0800 Subject: [PATCH] fix(scraping): supply douban referer to avoid 418 anti-hotlinking on image scraping --- app/startup/composition/network.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/app/startup/composition/network.py b/app/startup/composition/network.py index e899682a0..f0d57791f 100644 --- a/app/startup/composition/network.py +++ b/app/startup/composition/network.py @@ -283,7 +283,14 @@ class _ScrapingHttpAdapter: timeout: int, ) -> Optional[ScrapingResponsePort]: """读取需要完整载荷的音乐封面响应。""" - options: dict[str, Any] = {"proxies": proxies, "ua": ua, "timeout": timeout} + options: dict[str, Any] = { + "proxies": proxies, + "ua": ua, + "timeout": timeout, + "referer": ( + "https://movie.douban.com/" if "doubanio.com" in url else None + ), + } response = RequestUtils(**options).get_res(url) return cast(Optional[ScrapingResponsePort], response) @@ -295,7 +302,13 @@ class _ScrapingHttpAdapter: ua: str, ) -> ScrapingStreamResponsePort: """打开由刮削链上下文关闭的流式图片响应。""" - options: dict[str, Any] = {"proxies": proxies, "ua": ua} + options: dict[str, Any] = { + "proxies": proxies, + "ua": ua, + "referer": ( + "https://movie.douban.com/" if "doubanio.com" in url else None + ), + } response = RequestUtils(**options).get_stream(url=url) return cast(ScrapingStreamResponsePort, response)