Отправка нескольких элементов данных POST с одним и тем же именем с помощью AppEngine - PullRequest
6 голосов
/ 26 августа 2010

Я пытаюсь отправить данные POST на сервер, используя urlfetch в AppEngine. Некоторые из этих элементов 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 ]

14 голосов
/ 26 августа 2010

Измените свой словарь 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 голос
/ 26 августа 2010

Обычный диктон Python не может справиться с подобными вещами; используйте что-то вроде webob.MultiDict:

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