调用Allegro API出现415 Unsupported Media Type错误求排查
问题原因分析
你遇到的415错误核心问题出在请求体的传递方式上:
- 使用
requests库的put方法时,json参数接受的是Python字典(而非JSON字符串),库会自动完成字典到JSON字符串的序列化,同时自动维护正确的Content-Type头。 - 你现在用
json.dumps(payload)把字典转成JSON字符串后传给json参数,这会导致requests把该字符串当成JSON的原始值处理,最终发送的请求体是一个包裹着JSON字符串的JSON(比如"{"maxAmount":..."),而非后端期望的JSON对象格式,服务器无法识别这种格式,因此返回415错误。
修复方案
直接将字典传给json参数,无需手动调用json.dumps():
response = session.put( url=DEFAULT_API_URL + "/bidding/offers/1498090700/bid", json=payload, # 直接传递Python字典即可 )
额外补充两个细节:
- 单独设置
charset头意义不大,标准格式应该是Content-Type: application/json; charset=utf-8,不过requests在使用json参数时会自动处理编码,这个头可以不用手动设置。 - GET请求正常是因为GET请求不需要请求体,不存在格式问题,和PUT的情况不冲突。
内容的提问来源于stack exchange,提问作者ziajak
相关产品推荐
相关产品推荐

