From 2b4b073ae205fdff2b9d772cb6325bbcfc151fc5 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 29 Aug 2026 05:44:38 +0800 Subject: [PATCH] fix(network): normalize per-request cookie strings --- app/adapters/network/http.py | 9 +++++++-- tests/test_request_utils.py | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/app/adapters/network/http.py b/app/adapters/network/http.py index 1ef9fb03a..aeaa04f29 100644 --- a/app/adapters/network/http.py +++ b/app/adapters/network/http.py @@ -462,7 +462,7 @@ class RequestUtils: :param method: HTTP方法,如 get, post, put 等 :param url: 请求的URL :param raise_exception: 是否在发生异常时抛出异常,否则默认拦截异常返回None - :param kwargs: 其他请求参数,如headers, cookies, proxies等 + :param kwargs: 其他请求参数,如headers、cookies(字符串或字典)、proxies等 :return: HTTP响应对象 :raises: requests.exceptions.RequestException 仅raise_exception为True时会抛出 """ @@ -473,7 +473,12 @@ class RequestUtils: kwargs["headers"] = with_correlation_header( kwargs.get("headers", self._headers) ) - kwargs.setdefault("cookies", self._cookies) + request_cookies = kwargs.get("cookies") + if isinstance(request_cookies, str): + # requests 的请求准备阶段仅支持字典或 CookieJar,站点配置仍以字符串保存。 + kwargs["cookies"] = cookie_parse(request_cookies) + else: + kwargs.setdefault("cookies", self._cookies) kwargs.setdefault("proxies", self._proxies) kwargs.setdefault("timeout", self._timeout) kwargs.setdefault("verify", self._verify) diff --git a/tests/test_request_utils.py b/tests/test_request_utils.py index cb44181de..35f211225 100644 --- a/tests/test_request_utils.py +++ b/tests/test_request_utils.py @@ -174,3 +174,24 @@ def test_request_utils_preserves_default_and_explicit_tls_verification() -> None assert default_session.calls[0][2]["verify"] is False assert secure_session.calls[0][2]["verify"] is True + + +def test_request_utils_normalizes_per_request_cookie_string(monkeypatch) -> None: + """单次请求传入 Cookie 字符串时应先转换为 requests 支持的字典。""" + response = _make_response() + session = requests.Session() + prepared_requests = [] + + def fake_send(request, **_kwargs): + prepared_requests.append(request) + return response + + monkeypatch.setattr(session, "send", fake_send) + + result = RequestUtils(session=session).get_res( + "https://example.com/data", + cookies="sid=1; token=two", + ) + + assert result is response + assert prepared_requests[0].headers["Cookie"] == "sid=1; token=two"