2010-08-26 9 views
5

Si tenta di inviare dati POST a un server utilizzando urlfetch in AppEngine. Alcuni di questi elementi POST-dati hanno lo stesso nome, ma con valori diversi.Invio di più elementi di dati POST con lo stesso nome, utilizzando 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'}) 

Tuttavia, in questo esempio, il server sembra receieve un solo elemento di nome data, con il valore bar. Come potrei risolvere questo problema?

risposta

13

Modificare il dizionario form_fields in modo che i campi con lo stesso nome sono trasformati in liste e utilizza l'argomento doseq-urllib.urlencode:

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

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

A questo punto, form_data è 'data=foo&data=bar', che è quello che penso tu abbia bisogno.

+0

Grazie Will, questo ha funzionato perfettamente (bella e semplice spiegazione) – jhanifen

1

Un ditt di python normale non può gestire questo genere di cose; usare qualcosa come un webob.MultiDict:

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