Python获取服务器响应Cookie的调试与解决方案

Chloe
Chloe
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍在Python中使用Requests库获取网站Cookie时遇到的常见陷阱。通过调试发现,某些情况下服务器返回的Cookie可能存在于r.request.headers而非r.headers中。文章分析了请求头中Host和Referer字段对Cookie返回的影响,并推荐通过会话对象自动管理Cookie的最佳实践,帮助开发者解决模拟登录中的Cookie获取问题。

总结

在调试网站以获取Cookies时,请仔细检查r.headers和r.request.headers这两个属性,因为Cookie可能出现在其中任意一个里面,具体位置取决于服务器的响应机制。

先贴一个代码

import re
import requests
from bs4 import BeautifulSoup
def printHeaders(headers):
 for h in headers:
 print(h+" : "+headers[h] + '\r\n')

def printCookies(cookies):
 for h in cookies:
 print(h+" : "+cookies[h] + '\r\n')

def loginFw(id,password):
 url = "http://xxxxx/login.asp" 
 try:
 headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
   'Host':'www.xxx.org',
   'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
   'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
   'Accept-Encoding':'gzip, deflate',
   'Content-Type':'application/x-www-form-urlencoded',
   'Referer':'http://xxx/login.asp',
   'Connection':'keep-alive',
   }
 params = {"Reglname":id,"reglpassword":password}
 r = requests.post(url,data=params,headers=headers)
 printHeaders(r.request.headers) #服务器返回的cookie需要用r.request里的headers来获取
 printHeaders(r.headers) #这里是获取不到服务器返回的cookie的

 r.encoding = 'utf-8'

 return r.text
 except Exception as e:
 print("登陆错误:"+str(e))




ret = loginFw("xxx@qq.com","xxx")
#print(ret)

事情经过

在调试一个网站的模拟登录功能时,我尝试通过r.headers来获取Cookies,但始终无法成功获取到网站返回的Cookie。这让我怀疑是否请求头设置不正确,于是我开始遍历r.request.headers。打印结果显示,虽然请求头信息正常,但我发现其中竟然包含了预期的响应Cookie,这与我之前的认知不符。

这让我困惑:难道我对r.request这个对象的理解有误?以往我一直认为该对象仅存储我发送出去的请求信息,为何会包含响应Cookie呢?

在百思不得其解之际,我查阅了Requests库官方文档中关于Response对象包含Request的解释。文档指出:“The PreparedRequest object to which this is a response.”(表示看不到什么意思,百度翻译也翻译不清楚),这似乎表明它与响应过程有关,看来是我之前的理解出现了偏差。

更好的解决方案

推荐使用Requests提供的“会话对象”(Session Object),它能够自动保留请求所获取的参数,包括Cookie,从而简化开发过程。

具体请跳转传送门:

http://cn.python-requests.org/zh_CN/latest/user/advanced.html#request-and-response-objects

后来

经过进一步排查,我发现导致Cookie出现异常的原因是在请求头中显式设置了“Host”和“Referer”字段。因此,建议今后不要随意手动设置这两个参数,除非完全按照封包中的原始值进行配置,以避免干扰Cookie的正常返回。

以上这篇python获取服务器响应cookie的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表