requests会话Cookie会在循环后被删除吗?代码调试时Cookie未显示
问题分析与解决
首先明确:requests会话中的Cookie不会被循环自动删除,你的问题出在代码的几个关键细节上:
- 变量名冲突:你直接把
requests模块名赋值为requests.Session()实例,虽然能运行,但会覆盖原模块的引用,后续调用模块其他方法会报错。建议改用不同的变量名,比如sess = requests.Session()。 - 手动传入的Cookie不会存入会话:你每次请求手动传递的
cookies参数,只是本次请求临时携带的Cookie,并不会自动保存到会话的cookiesJar中。会话的cookiesJar仅会自动存储服务器通过Set-Cookie响应头返回的Cookie。如果目标服务器没有在响应中设置Cookie,会话的cookies自然是空的。 - 验证方式错误:你打印的是会话的
cookies,但如果服务器没返回Cookie,自然看不到内容。要验证手动传入的Cookie是否生效,应该查看请求的请求头(比如response.request.headers),或者检查响应中是否有依赖该Cookie的内容。
修正后的示例代码
import requests # 用独立变量存储会话,避免覆盖原模块 sess = requests.Session() for x in range(0,5): cookies = { 'key': 'iteration: '+ str(x) } # 发起请求并携带手动设置的Cookie response = sess.get('https://example.com', cookies=cookies) # 查看本次请求实际携带的请求头(包含Cookie) print(f"第{x}次请求的请求头:", response.request.headers) # 如果服务器返回了Set-Cookie,会话会自动保存,此时打印会话Cookie才有内容 print(f"第{x}次请求后会话中的Cookie:", sess.cookies)
内容的提问来源于stack exchange,提问作者renea
相关产品推荐
相关产品推荐

