From 93589ee3818fed5f5470b690b3daafb7008d2ab1 Mon Sep 17 00:00:00 2001 From: huanghuoguoguo <1051233107@qq.com> Date: Sat, 16 May 2026 10:37:12 +0800 Subject: [PATCH] fix(utils): preserve QQ image URL scheme --- src/langbot/pkg/utils/image.py | 3 ++- tests/unit_tests/utils/__init__.py | 1 + tests/unit_tests/utils/test_image.py | 22 ++++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 tests/unit_tests/utils/__init__.py create mode 100644 tests/unit_tests/utils/test_image.py diff --git a/src/langbot/pkg/utils/image.py b/src/langbot/pkg/utils/image.py index 5716b07d..0296ba05 100644 --- a/src/langbot/pkg/utils/image.py +++ b/src/langbot/pkg/utils/image.py @@ -145,7 +145,8 @@ def get_qq_image_downloadable_url(image_url: str) -> tuple[str, dict]: """获取QQ图片的下载链接""" parsed = urlparse(image_url) query = parse_qs(parsed.query) - return f'http://{parsed.netloc}{parsed.path}', query + scheme = parsed.scheme or 'http' + return f'{scheme}://{parsed.netloc}{parsed.path}', query async def get_qq_image_bytes(image_url: str, query: dict = {}) -> tuple[bytes, str]: diff --git a/tests/unit_tests/utils/__init__.py b/tests/unit_tests/utils/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/tests/unit_tests/utils/__init__.py @@ -0,0 +1 @@ + diff --git a/tests/unit_tests/utils/test_image.py b/tests/unit_tests/utils/test_image.py new file mode 100644 index 00000000..efa3abe6 --- /dev/null +++ b/tests/unit_tests/utils/test_image.py @@ -0,0 +1,22 @@ +from langbot.pkg.utils.image import get_qq_image_downloadable_url + + +def test_get_qq_image_downloadable_url_preserves_https_scheme(): + url, query = get_qq_image_downloadable_url('https://gchat.qpic.cn/gchatpic_new/abc/0?term=2&is_origin=1') + + assert url == 'https://gchat.qpic.cn/gchatpic_new/abc/0' + assert query == {'term': ['2'], 'is_origin': ['1']} + + +def test_get_qq_image_downloadable_url_preserves_http_scheme(): + url, query = get_qq_image_downloadable_url('http://gchat.qpic.cn/gchatpic_new/abc/0?term=2') + + assert url == 'http://gchat.qpic.cn/gchatpic_new/abc/0' + assert query == {'term': ['2']} + + +def test_get_qq_image_downloadable_url_defaults_missing_scheme_to_http(): + url, query = get_qq_image_downloadable_url('gchat.qpic.cn/gchatpic_new/abc/0?term=2') + + assert url == 'http://gchat.qpic.cn/gchatpic_new/abc/0' + assert query == {'term': ['2']}