Python requests调用Wildberries API POST请求报400错误,如何设置参数?
问题:调用Wildberries库存API返回400错误(请求体不正确)
我用Python 3.10调用Wildberries平台的库存列表API,原代码如下:
import requests url = 'https://suppliers-api.wildberries.ru/api/v3/stocks/{warehouse}' key = 'my_key' headers_auth = {'Authorization': key} wh_id = my_id #int auth = requests.post(url.format(warehouse = wh_id), headers = headers_auth) print(auth) leftovers = auth.json() print(leftovers)
执行后得到响应:<Response [400]> {'code': 'IncorrectRequestBody', 'message': 'Некорректное тело запроса'},其中message翻译为“请求体不正确”。
我尝试过以下几种方式:
- 将wh_id直接写入路径:
url = 'https://suppliers-api.wildberries.ru/api/v3/stocks/wh_id' auth = requests.post(url, headers = headers_auth) - 在data中传入warehouse参数并调整URL:
data = {'warehouse':wh_id} auth = requests.post(url, data = data, headers = headers_auth) - 按照请求体传入条码数组:
barcodes = ['barcode'] data = {"skus": barcodes} auth = requests.post(url.format(warehouse = wh_id), data=data, headers = headers_auth)
根据Wildberries的API文档(已翻译为中文),该接口/api/v3/stocks/{warehouse}的warehouse是唯一必填路径参数,但文档未明确要求额外请求体数据,可我仍收到400错误,希望能获得200响应码,请问问题出在哪里?
问题分析与解决方案
核心原因
Wildberries的这个库存查询API实际上强制要求请求体为JSON格式,且必须包含skus字段——哪怕你不需要过滤特定SKU,也要传入空的skus数组。之前的尝试要么没传请求体,要么用了错误的请求体格式(data参数默认发送form-data,而非接口要求的application/json)。
修正后的代码
import requests url = 'https://suppliers-api.wildberries.ru/api/v3/stocks/{warehouse}' key = 'my_key' headers_auth = {'Authorization': key} wh_id = my_id # 确保是int类型 # 必须传入JSON格式的请求体,空数组表示查询所有库存 payload = {"skus": []} response = requests.post(url.format(warehouse=wh_id), json=payload, headers=headers_auth) print(response.status_code) leftovers = response.json() print(leftovers)
对之前尝试的错误说明
- 直接写入wh_id到URL:未传入任何请求体,不符合接口强制要求的JSON请求体规则,返回400。
- 用data传warehouse参数:
warehouse是路径参数,不是请求体参数,且data默认发送form-data格式,接口无法识别,返回400。 - 用data传skus数组:
data参数默认发送form-data,而非接口要求的application/json格式,因此请求体被判定为无效。
补充文档说明(翻译自官方API文档)
该POST接口用于获取指定仓库的库存数据:
- 路径参数
warehouse:必填,仓库ID(整数类型) - 请求体:必须是包含
skus字段的JSON对象,skus为字符串数组,用于过滤指定SKU的库存;若需查询全部库存,传入空数组即可。
内容的提问来源于stack exchange,提问作者Sharmat
相关产品推荐
相关产品推荐

