Python 使用AppEngine发送具有相同名称的多个POST数据项

Python 使用AppEngine发送具有相同名称的多个POST数据项,python,google-app-engine,urlfetch,Python,Google App Engine,Urlfetch,我尝试使用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.POS

我尝试使用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
的项目。我怎样才能解决这个问题呢?

一个普通的python dict无法处理这种事情;使用类似webob.MultiDict的东西:

>>> z = webob.MultiDict([('foo', 'bar'), ('foo', 'baz')])
>>> urllib.urlencode(z)
'foo=bar&foo=baz'

修改
form\u字段
字典,以便将同名字段转换为列表,并使用
doseq
参数设置为
urllib.urlencode

form_fields = {
   "data": ["foo","bar"]
}

form_data = urllib.urlencode(form_fields, doseq=True)

在这一点上,
form\u data
'data=foo&data=bar'
,这是我认为您需要的。

谢谢Will,这非常好用(很好的简单解释)