先区分参数与网址结构
查询参数里可能出现空格、中文或加号。直接用字符串相加容易让参数值中的符号被误解释。例如搜索词“C++ 入门”中的加号是内容,而不是另一个字段的分隔方式。下面使用 Python 标准库生成参数,不会发起网络请求。
生成并读回查询参数
from urllib.parse import urlencode, parse_qs
params = {'q': 'C++ 入门', 'page': '1'}
query = urlencode(params)
url = 'https://example.com/search?' + query
print(url)
assert parse_qs(query)['q'] == ['C++ 入门']这里的 example.com 仅用于构造演示网址。检查输出时,加号内容应被编码,空格采用表单查询参数的编码方式表示。最后一行通过重新解析参数验证搜索词没有丢失。不要把整个网址都交给同一个字段编码函数处理。
多个相同名称的参数
如果一个字段需要携带多个值,可使用列表并结合 urlencode 的 doseq=True。接收端是否接受重复字段、如何解释顺序,需要以具体接口协议为准;编码正确并不代表业务参数一定有效。
使用前的检查
避免对已经编码的参数再次编码,否则百分号可能被进一步处理,接收端得到的值也会变化。构造目标链接时还应单独检查协议和域名;参数编码不是网址安全校验,也不会判断远端页面是否存在。