要解决的问题

筛选条件需要同时传入多个标签时,接口可能要求重复的 tag 参数。将列表直接拼成字符串,或把查询串简单按等号切开,容易改变接收端看到的值。下面用两个标签、空参数和 C++ 作为可检查样本。

适用环境

Python 3.12,urllib.parse 标准库;示例只构造文本,不访问网站。

操作步骤与示例

先运行下面的小样本,再把输入替换为自己的资料;保留原始文件副本。

from urllib.parse import urlencode, parse_qs
params = {"tag": ["python", "linux"], "q": "C++", "empty": ""}
query = urlencode(params, doseq=True)
parsed = parse_qs(query, keep_blank_values=True)
assert parsed["tag"] == ["python", "linux"]
assert parsed["q"] == ["C++"]
assert parsed["empty"] == [""]
print(query)

如何判断结果

预期参数中出现两次 tag,字面加号被编码,empty 保持空值。往返检查通过说明这些样本值没有丢失,不表示目标接口一定接受重复参数;最终格式仍需以接口协议为准。

常见问题与排查

parse_qs 默认可能不保留空值,需在确实需要时启用对应选项。不要对完整 URL 重复进行参数编码,也不要把加号的表单语义与单个 URL 组件的解码规则混为一谈。

适用边界

此页不验证目标网站安全性,不处理签名参数的特殊排序要求,也不发网络请求。签名协议要求的字节顺序、空格编码与重复参数规则应独立核对。

参考资料