Sending multiple POST data items with the same name, using AppEngine

五迷三道 提交于 2019-12-06 01:26:20

问题


I try to send POST data to a server using urlfetch in AppEngine. Some of these POST-data items has the same name, but with different values.

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'})

However, in this example, the server seems to receieve only one item named data, with the value bar. How could I solve this problem?


回答1:


Modify your form_fields dictionary so that fields with the same name are turned into lists, and use the doseq argument to urllib.urlencode:

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

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

At this point, form_data is 'data=foo&data=bar', which is what I think you need.




回答2:


A normal python dict can't handle this sort of thing; use something like a webob.MultiDict:

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


来源:https://stackoverflow.com/questions/3577064/sending-multiple-post-data-items-with-the-same-name-using-appengine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!