Python urllib2 发送 POST 数据
我正在尝试使用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'