我尝试使用AppEngine中的urlfetch将POST数据发送到服务器。其中一些POST数据项具有相同的名称,但具有不同的值。
form_fields = {
"data": "foo",
"data": "bar"
}
form_data = urllib.urlencode(form_fields)
result = urlfetch.fetch(url="http://www.foo.com/", payload=form_data, method=urlfetch.POST, headers={'Content-Type': 'application/x-www-form-urlencoded'})
但是,在此示例中,服务器似乎只接收一个名为data
的项,其值为bar
。我怎么能解决这个问题?
答案 0 :(得分:14)
修改您的form_fields
字典,以便将具有相同名称的字段转换为列表,并使用doseq
参数urllib.urlencode
:
form_fields = {
"data": ["foo","bar"]
}
form_data = urllib.urlencode(form_fields, doseq=True)
此时,form_data
为'data=foo&data=bar'
,这是我认为您需要的。
答案 1 :(得分:1)
普通的python dict无法处理这类事情;使用像webob.MultiDict:
这样的东西>>> z = webob.MultiDict([('foo', 'bar'), ('foo', 'baz')])
>>> urllib.urlencode(z)
'foo=bar&foo=baz'