6

我尝试使用 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。我该如何解决这个问题?

4

2 回答 2

14

修改您的form_fields字典,以便将具有相同名称的字段转换为列表,并使用以下doseq参数urllib.urlencode

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

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

在这一点上,form_datais 'data=foo&data=bar',这是我认为你需要的。

于 2010-08-26T16:50:03.837 回答
1

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

>>> z = webob.MultiDict([('foo', 'bar'), ('foo', 'baz')])
>>> urllib.urlencode(z)
'foo=bar&foo=baz'
于 2010-08-26T16:46:48.280 回答