You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何在API请求URL中传递多SKU重复键参数

解决多SKU参数的API请求问题

问题核心

当电商API要求在URL中传递多个同名的sku参数(如sku=XXX&sku=YYY)时,用字典存储参数会因键的唯一性导致重复值被覆盖,urllib.parse.urlencode处理字典也只会保留最后一个sku参数,无法满足API的参数要求。

解决方案

1. 利用Requests库的params参数自动处理多同名参数

Requests库的params参数支持传入值为列表的字典,会自动将列表中的每个元素转换为同名URL参数,无需手动拼接字符串,既简洁又能避免编码问题。

2. 修改get_stocks函数以支持多SKU传入

将原函数的sku参数改为接受SKU列表,同时改用Requests的params参数传递参数:

def get_stocks(self, campaign_id, warehouse_id, skus):
    """获取库存信息
    参数:
        campaign_id (int): Store中的client_id
        warehouse_id (int): Warehouse中的warehouse_id
        skus (list): 商品SKU列表
    返回:
        tuple: (是否成功, 状态信息/错误信息, 库存数据(成功时))
    """
    url = f"{self.url}campaigns/{campaign_id}/warehouses/{warehouse_id}/stocks/actual.json"
    # 通过params传递多SKU参数,Requests会自动生成sku=xxx&sku=yyy格式
    req = requests.get(url, params={'sku': skus}, headers=self.headers)
    
    if req.status_code == 200:
        return True, '200', req.json()
    
    # 兼容API返回格式异常的情况
    try:
        error_msg = req.json()["error"]["message"]
    except (KeyError, ValueError):
        error_msg = f"请求失败,状态码: {req.status_code}"
    return False, error_msg

3. 从Django Product模型获取SKU列表

如果需要从数据库中获取所有商品的SKU,可通过Django的QuerySet提取:

# 获取所有Product的SKU并转为列表
skus = list(Product.objects.values_list('sku', flat=True))
# 调用库存查询方法
success, msg, stock_data = your_api_client.get_stocks(campaign_id, warehouse_id, skus)

备选方案(手动拼接参数)

如果不想依赖Requests的自动处理,也可以用urllib.parse.urlencode处理元组列表来生成多参数的查询字符串:

from urllib.parse import urlencode

# 构造元组列表,每个元素为(参数名, SKU值)
params = [('sku', sku) for sku in skus]
query_string = urlencode(params)
# 拼接完整URL
full_url = f"{url}?{query_string}"
req = requests.get(full_url, headers=self.headers)

注意事项

  • 若API要求使用POST方法且参数需放在URL中,只需将requests.get改为requests.post,params参数的用法保持不变;
  • 若POST参数需放在请求体中,请根据API要求选择form-data或json格式传递,此时无需在URL中拼接参数。

内容的提问来源于stack exchange,提问作者Iren E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:50:49