fix(network): normalize per-request cookie strings

This commit is contained in:
jxxghp
2026-08-29 05:44:38 +08:00
parent 8cd2141b6d
commit 2b4b073ae2
2 changed files with 28 additions and 2 deletions

View File

@@ -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)

View File

@@ -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"