Python urllib2发送POST数据

时间:2010-11-15 00:31:40

标签: python http

我正在尝试使用urllib发送POST数据,但问题通常是您对字段字典进行urlencode,然后将其与您的请求一起发送。但是我必须发送到服务器的一些字段被命名为完全相同的名称,因此使用字典我最终会从字典中删除大量数据,因为您不能拥有两个具有相同名称的密钥不同的数据。

我以正确的语法以字符串格式获取请求数据(例如,var = value& var = value2& ...),我尝试将其与我的urllib请求一起发送,但每次都收到错误请求时间。有没有其他方法在发送之前对数据进行urlencode,所以我没有得到400?

1 个答案:

答案 0 :(得分: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'