Frage

Ich versuche POST-Daten an einen Server mit urlfetch in App Engine zu senden. Einige dieser POST-Datenelemente haben den gleichen Namen, aber mit unterschiedlichen Werten.

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

Doch in diesem Beispiel scheint der Server nur ein Element namens data receieve, mit dem Wert bar. Wie könnte ich dieses Problem lösen?

War es hilfreich?

Lösung

Ä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', das ist, was ich glaube, Sie brauchen.

Andere Tipps

Eine normale Python dict diese Art der Sache nicht verarbeiten kann; Verwendung so etwas wie ein webob.MultiDict:

>>> z = webob.MultiDict([('foo', 'bar'), ('foo', 'baz')])
>>> urllib.urlencode(z)
'foo=bar&foo=baz'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top