如何将EditThisCookie导出的Cookie用于requests库实现登录?
问题描述
我用EditThisCookie导出Cookie保存到cookie.json,想通过它发送GET请求获取Steam账号物品,但始终无法成功登录。
Cookie示例(cookies.json)
[{ "domain": ".github.com", "expirationDate": 12401290312391203012, "hostOnly": false, "httpOnly": false, "name": "_octo", "path": "/", "sameSite": "lax", "secure": true, "session": false, "storeId": "0", "value": "MIGHT_BE_SMTH_PERSONAL :(", "id": 1 }]
注:expirationDate和value已隐藏,避免隐私泄露。
我的代码
import requests import json url = 'https://steamcommunity.com/inventory/steamid/730/2?&count=5000' with open('cookies.json', 'r') as f: json_data = f.read() parsed_data = json.loads(json_data) if isinstance(parsed_data, list) and all(isinstance(item, dict) for item in parsed_data): cookies = parsed_data else: cookies = [] r = requests.Session() for cookie in cookies: r.cookies.update(cookie) headers = { 'User-Agent' : 'my_user_agent' } r.get(url, headers=headers)
问题排查与解决方法
1. EditThisCookie格式与requests的兼容性问题
EditThisCookie导出的Cookie包含大量requests不需要的字段(如hostOnly、sameSite、storeId、id等),直接用update方法会导致解析异常。requests仅需要**name、value、domain、path、expires(注意字段名是expires而非expirationDate)、secure、httpOnly**这些核心字段,且expirationDate是毫秒级时间戳,需要转成秒级才能被requests识别。
处理方法:过滤Cookie字段,只保留必要内容:
# 替换原有解析Cookie的代码 with open('cookies.json', 'r') as f: parsed_data = json.load(f) cookies = [] for item in parsed_data: filtered_cookie = { 'name': item.get('name'), 'value': item.get('value'), 'domain': item.get('domain'), 'path': item.get('path'), 'expires': int(item.get('expirationDate', 0) / 1000) if not item.get('session') else None, 'secure': item.get('secure'), 'httpOnly': item.get('httpOnly') } # 过滤空值字段 filtered_cookie = {k: v for k, v in filtered_cookie.items() if v is not None} cookies.append(filtered_cookie)
2. Steam库存请求的核心要求
- 替换真实SteamID:URL中的
steamid是占位符,必须替换为目标账号的64位SteamID。 - 核心认证Cookie缺失:访问Steam库存必须包含
steamLogin、steamLoginSecure这类关键认证Cookie,确认你的导出文件里有这些Steam相关Cookie(示例中的Cookie是GitHub的,和Steam完全无关,这是直接失败的原因之一)。 - 使用真实User-Agent:不要用
my_user_agent占位符,直接复制浏览器的真实User-Agent,比如Chrome的:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36。
3. 正确的Session Cookie添加方式
建议用session.cookies.set()方法添加过滤后的Cookie,比update更可靠:
session = requests.Session() for cookie in cookies: session.cookies.set(**cookie)
完整修正后的代码示例
import requests import json # 替换为真实的64位SteamID url = 'https://steamcommunity.com/inventory/12345678901234567/730/2?count=5000' # 处理Cookie with open('cookies.json', 'r') as f: parsed_data = json.load(f) cookies = [] for item in parsed_data: filtered = { 'name': item['name'], 'value': item['value'], 'domain': item['domain'], 'path': item['path'], 'expires': int(item['expirationDate'] / 1000) if not item['session'] else None, 'secure': item['secure'], 'httpOnly': item['httpOnly'] } cookies.append({k: v for k, v in filtered.items() if v is not None}) session = requests.Session() # 添加Cookie到Session for cookie in cookies: session.cookies.set(**cookie) # 使用真实的User-Agent headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } response = session.get(url, headers=headers) # 检查响应状态和内容 print(response.status_code) print(response.text[:500]) # 打印前500字符验证是否成功
内容的提问来源于stack exchange,提问作者AlwaysneedsHelp
相关产品推荐
相关产品推荐

