Python urllib2 发送 POST 数据

1 投票
1 回答
4816 浏览
提问于 2025-04-16 07:04

我正在尝试使用urllib发送POST数据,但遇到了一些问题。通常情况下,你会把字段的字典进行编码,然后把它和请求一起发送。但是我有一些字段的名字是完全一样的,所以用字典的话,我会把很多数据给删掉,因为字典里不能有两个相同名字的键。

我把请求的数据以字符串格式准备好了,格式是正确的(比如说 var=value&var=value2&...),然后我试着把它和urllib请求一起发送,但每次都会收到一个错误请求的回复。有没有其他方法可以在发送之前对数据进行编码,这样我就不会收到400错误了?

1 个回答

6

urllib.urlencode() 可以接收一个包含元组的列表,这样你就可以为一个参数指定多个值:

>>> urlencode([("var", "value"), ("var", "value2")])
'var=value&var=value2'

或者你也可以使用一个包含列表作为值的映射:

>>> p = {"var": ["value", "value2"], "var2": ["yetanothervalue"]}
>>> urlencode([(k, v) for k, vs in p.items() for v in vs])
'var=value&var=value2&var2=yetanothervalue'

你甚至可以让值是列表 或者 字符串,虽然这样写起来就不那么简洁了:

>>> p = {"var": ["value", "value2"], "var2": "yetanothervalue"}
>>> urlencode([(k, v) for k, vs in p.items()
...     for v in isinstance(vs, list) and vs or [vs]])
'var=value&var=value2&var2=yetanothervalue'

撰写回答