2010-11-15 91 views
1

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

我有我的请求数据在正确的语法的字符串格式(例如,VAR =价值& VAR =数值& ......),我尝试发送与我的urllib请求一起,但我得到一个错误的请求每次。在发送之前是否有任何其他方式对数据进行urlencode编码,所以我没有得到400?

+0

你确定400是由于POST数据格式,而不是其他(例如,用户代理头)? – SimonJ 2010-11-15 01:24:58

回答

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'