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

6 投票
2 回答
3562 浏览
提问于 2025-04-16 03:20

我想在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。我该怎么解决这个问题呢?

2 个回答

1

普通的Python字典处理不了这种情况;可以使用像webob.MultiDict这样的东西:

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

修改你的 form_fields 字典,让那些名字相同的字段变成列表,然后在调用 urllib.urlencode 时使用 doseq 参数:

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

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

到这个时候,form_data 的内容是 'data=foo&data=bar',这就是我认为你需要的结果。

撰写回答