Python发送Steam交易报价时持续返回400 Null响应求助
导致Steam交易报价400-null响应的常见原因及修复方案
json_tradeoffer格式错误:Steam服务器要求该字段是JSON字符串,而非Python字典。你需要用json.dumps()将字典转换为字符串后再传入表单数据。trade_offer_create_params参数错误:该参数不能直接写"tradeOfferToken",必须是包含token值的JSON字符串,格式为json.dumps({"tradeOfferToken": "你的实际token"})。- 请求头缺失关键字段:必须添加
Content-Type: application/x-www-form-urlencoded,否则服务器无法解析表单;建议补充User-Agent模拟浏览器请求,降低被拦截概率。 - SessionID不匹配:表单数据中的
sessionid必须与cookies里的sessionid完全一致,包括字符大小写和长度,任何差异都会触发验证失败。 - 资产信息无效:检查
assetid是否为你库存中真实可交易的物品ID,appid和contextid是否对应正确(比如CS:GO的contextid确实是"2")。
修正后的示例代码
import requests import json # 完善请求头 headers = { "Referer": "https://steamcommunity.com/tradeoffer/new/?partner=XXXX&token=XXX", "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } cookies = { "sessionid": "XXXXXXXXXXXXXXXXXXXXX", "steamLoginSecure": "XXXXXXXXXXXXXXXXXXXXXXXXXX", } # 交易报价内容 trade_offer = { "newversion": True, "version": 2, "me": { "assets": [ { "appid": 730, "contextid": "2", "amount": 1, "assetid": "XXXXX" } ], "currency": [], "ready": False }, "them": { "assets": [], "currency": [], "ready": False } } # 构造正确的表单数据 data = { "sessionid": "XXXX", # 与cookies中的sessionid保持一致 "serverid": "1", # 转为字符串避免类型问题 "partner": "partner_id", "tradeoffermessage": "", "json_tradeoffer": json.dumps(trade_offer), "captcha": "", "trade_offer_create_params": json.dumps({"tradeOfferToken": "你的实际token值"}) } # 发送请求 response = requests.post( "https://steamcommunity.com/tradeoffer/new/send", headers=headers, cookies=cookies, data=data ) print(response.status_code, response.text)
内容的提问来源于stack exchange,提问作者Limes
相关产品推荐
相关产品推荐

