如何用Python requests获取请求头中非默认路径的Cookie?
requests库默认的response.cookies(RequestCookieJar)会遵循RFC Cookie规范,只保留匹配当前请求URL路径的Cookie,所以不同路径的Cookie不会被自动纳入其中。但服务器返回的所有Cookie(包括不同路径的)都会完整出现在响应头的Set-Cookie字段里,你可以通过以下方法获取:
方法1:提取并解析响应头的Set-Cookie字段
所有Cookie信息都在响应的Set-Cookie头中(可能存在多个条目),用response.headers.getlist('Set-Cookie')可获取完整列表,再借助Python标准库的http.cookies.SimpleCookie解析每个Cookie的详细属性:
import requests from http.cookies import SimpleCookie # 发送请求 target_url = "你的目标请求URL" resp = requests.post(target_url) # 获取所有Set-Cookie条目 all_set_cookies = resp.headers.getlist('Set-Cookie') # 解析每个Cookie的属性(name、value、path、domain等) parsed_cookies = {} for cookie_str in all_set_cookies: cookie_obj = SimpleCookie() cookie_obj.load(cookie_str) for name, morsel in cookie_obj.items(): parsed_cookies[name] = { "value": morsel.value, "path": morsel.get("path", "/"), "domain": morsel.get("domain"), "expires": morsel.get("expires") # 可按需提取secure、HttpOnly等其他属性 } # 输出所有Cookie(含不同路径的) print(parsed_cookies)
方法2:手动将不同路径的Cookie添加到Session的CookieJar
如果需要后续请求自动携带这些Cookie,可以将解析后的Cookie手动添加到requests.Session的CookieJar中,Session会在后续请求时根据目标路径自动匹配对应的Cookie:
import requests from http.cookies import SimpleCookie session = requests.Session() target_url = "你的目标请求URL" resp = session.post(target_url) # 解析并添加所有Cookie到Session for cookie_str in resp.headers.getlist('Set-Cookie'): cookie_obj = SimpleCookie() cookie_obj.load(cookie_str) for name, morsel in cookie_obj.items(): session.cookies.set( name, morsel.value, path=morsel.get("path", "/"), domain=morsel.get("domain") ) # 后续用session发送请求时,会自动携带符合路径的Cookie session.get("需要携带Cookie的目标URL")
关键说明
response.cookies的过滤逻辑是requests为贴合浏览器Cookie行为设计的,仅保留当前请求路径可访问的Cookie;- 响应头的
Set-Cookie是服务器返回的完整Cookie列表,无过滤,是获取所有Cookie的可靠来源。
内容的提问来源于stack exchange,提问作者Erika
相关产品推荐
相关产品推荐

