2010-08-26 2 views
5

Ich versuche, POST-Daten mithilfe von "urlfetch" in AppEngine an einen Server zu senden. Einige dieser POST-Datenelemente haben denselben Namen, jedoch unterschiedliche Werte.Senden mehrerer POST-Datenelemente mit demselben Namen mithilfe von AppEngine

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

jedoch in diesem Beispiel scheint der Server nur ein Element data, mit dem Wert bar genannt receieve. Wie kann ich dieses Problem lösen?

Antwort

13

Ändern Sie bitte Ihre form_fields Wörterbuch, so dass Felder mit dem gleichen Namen in Listen gedreht, und verwenden Sie das doseq Argument urllib.urlencode:

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

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

An diesem Punkt, form_data ist 'data=foo&data=bar', was ich denke, dass Sie brauchen.

+0

Danke Will, das hat perfekt funktioniert (nette und einfache Erklärung) – jhanifen

1

Ein normales Python-Diktat kann mit so etwas nicht umgehen; so etwas wie ein webob.MultiDict verwenden:

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