Python Requests会话中设置Cookie失败问题求助
问题分析
你遇到的核心问题是手动将浏览器Cookie复制到Requests后,请求未携带有效登录状态,大概率是以下几个原因:
- Cookie仅复制了键值对,缺少
domain、path等关键属性,导致Requests不知道该向哪个域名发送这些Cookie - 遗漏了浏览器中存在的其他登录相关Cookie字段
- 请求头不够完整,网站的反爬或验证机制识别出非浏览器请求
解决方案
1. 完整导出浏览器的Cookie
不要只复制键值对,需从浏览器开发者工具中导出所有和buff.163.com相关的Cookie,包括它们的domain、path属性:
- 打开Chrome开发者工具(F12)→ 切换到
Application标签 → 左侧Cookies目录下选择https://buff.163.com - 复制每一条Cookie的
Name、Value、Domain、Path字段,确保没有遗漏登录相关的字段(比如可能存在的login_uid之类的字段)
2. 正确向Session添加Cookie
不要仅用session.cookies.update(),这种方式不会自动绑定Cookie的domain和path,需手动设置每个Cookie的属性:
import requests # 从浏览器复制的完整Cookie列表,包含所有属性 full_cookies = [ {"name": "session", "value": "你的真实session值", "domain": ".buff.163.com", "path": "/"}, {"name": "csrf_token", "value": "你的真实csrf_token值", "domain": ".buff.163.com", "path": "/"}, {"name": "Locale-Supported", "value": "en", "domain": ".buff.163.com", "path": "/"}, {"name": "game", "value": "csgo", "domain": ".buff.163.com", "path": "/"}, {"name": "Device-Id", "value": "你的真实Device-Id值", "domain": ".buff.163.com", "path": "/"}, # 补充浏览器中存在的其他登录相关Cookie ] session = requests.session() # 逐个添加带属性的Cookie for cookie in full_cookies: session.cookies.set(**cookie)
3. 补充完整的请求头
模拟真实浏览器的请求头,避免被网站识别为爬虫:
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Referer": "https://buff.163.com/market/csgo", "Connection": "keep-alive", "Upgrade-Insecure-Requests": "1" } session.headers.update(headers)
4. 测试请求并验证结果
发送请求前先打印Session的Cookie,确认已正确添加;请求后检查响应内容是否包含登录状态标识:
url = "https://buff.163.com/goods/43011?from=market&tab=selling&tag_ids=447197&page_num=1&sort_by=paintwear.asc&paintseed=555" # 发送前确认Cookie print(session.cookies) response = session.get(url) print(response.status_code) # 验证是否登录成功(比如检查页面是否包含用户信息,而非登录按钮) if "登录" not in response.text: print("登录状态已成功复用") else: print("未成功登录,请检查Cookie完整性和请求头")
关键注意事项
- Cookie的
domain必须设置为.buff.163.com(包含主域名和子域名),否则Requests不会在请求buff.163.com时发送该Cookie - 确保Cookie是当前有效的,有些网站的Session Cookie会定期过期,需重新从浏览器复制
- 不要修改Cookie的原始值,任何篡改都会导致登录状态失效
内容的提问来源于stack exchange,提问作者Matthew Casey
相关产品推荐
相关产品推荐

