Senden mehrere POST-Datenelemente mit dem gleichen Namen, App Engine verwenden
-
01-10-2019 - |
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?
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