Python中为指定URL添加复杂参数时的格式异常问题咨询
解决URL参数编码不符合预期的问题
嘿,这个问题我之前也碰到过!urllib.parse.urlencode默认的行为是把嵌套字典拆成多个同名键,列表也会拆成多个相同键的条目,这就是你得到重复Context和itemIdentifiers的原因。要达到你想要的格式,得先手动处理嵌套的参数,再进行编码。
具体解决方案步骤:
- 把
Context这个嵌套字典序列化为紧凑的JSON字符串(去掉空格,和你期望的格式一致) - 把
itemIdentifiers列表转换为逗号分隔的字符串 - 用处理后的参数构建新的字典,再进行URL编码
完整代码示例:
import urllib.parse import json base_url = "https://www.catalogue.com/getdetail?" params = { 'Context': { "Country":"US", "Region":"US", "Language":"en", "Segment":"dhs", "CustomerSet":"19"}, 'itemIdentifiers': ['210-amsr','320-9704'] } # 预处理参数:将嵌套字典转为紧凑JSON,列表转为逗号分隔字符串 processed_params = { 'Context': json.dumps(params['Context'], separators=(',', ':')), 'itemIdentifiers': ','.join(params['itemIdentifiers']) } # 编码参数并拼接最终URL api_url = base_url + urllib.parse.urlencode(processed_params) print(api_url)
代码说明:
json.dumps(..., separators=(',', ':')):生成没有空格的JSON字符串,完全匹配你想要的Context格式','.join(...):把列表元素直接用逗号连接,避免urlencode生成多个itemIdentifiers键- 最后用
urlencode处理扁平化后的参数,就能得到你期望的最终URL啦!
运行这段代码后,输出的结果就是:
https://www.catalogue.com/getdetail?Context={"Country":"US","Region":"US","Language":"en","Segment":"dhs","CustomerSet":"19"}&itemIdentifiers=210-amsr,320-9704
内容的提问来源于stack exchange,提问作者Sejal Mohata
相关产品推荐
相关产品推荐

