2014-09-03 10 views
5

Sto cercando di eseguire un 'POST' http con multipart/form-data su un backend GAE python. Il mio metodo sul lato server sta ricevendo il corpo completo ma non ho assolutamente idea di come analizzare il contenuto del corpo senza doverlo passare manualmente e dividere il testo per i valori.Python - Parsing richiesta multipart/form-data sul lato server

La mia richiesta è simile al seguente:

POST /android/v4/MyPostMethod HTTP/1.1 
Accept: */* 
Accept-Charset: * 
Content-Length: 186808 
Content-Type: multipart/form-data; boundary=*****; charset="utf-8" 
Content_Length: 186808 
Content_Type: multipart/form-data; boundary=***** 
Host: myhost.appspot.com 
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.2; GT-I9300 Build/XXXXX) 
Via: HTTP/1.1 MSP-YV 

--***** 
Content-Disposition: form-data; name="value1" 
Content-Type: text/plain; charset=UTF-8 

f0ef73c5-54dd-40cf-9ee7-5c4cb764eb28 
--***** 
Content-Disposition: form-data; name="value2" 
Content-Type: text/plain; charset=UTF-8 

10d71e73-4d4d-4607-b271-f7efcfd0c59d 
--***** 
Content-Disposition: form-data; name="value3" 
Content-Type: text/plain; charset=UTF-8 

10d71e73-4d4d-4607-b271-f7efdfdfdfdf 
--***** 
Content-Disposition: form-data; name="logText"; filename="log.txt" 
Content-Type: text/plain 
Content-Transfer-Encoding: binary 

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
... 
--*****-- 

Ho cercato in giro e non sono riuscito a trovare una buona spiegazione di come fare questa cosa banale. Apprezzo se qualcuno potrebbe aiutarmi qui. Grazie.

risposta

4

Per qualche motivo cgi.FieldStorage() non funzionava per me, ma solo il metodo deprecato:

pdict = {'boundary':'*****'} 
cgi.parse_multipart(self.request.body_file, pdict) 

Non so perché, ma a patto che la sua lavorando bene con quello.

+0

Questo non è l'ideale per file di grandi dimensioni. Dalla documentazione "Questo è facile da usare ma non molto utile se si prevede di caricare megabyte - in questo caso, utilizzare invece la classe FieldStorage che è molto più flessibile." – mbarkhau

0

Si desidera la libreria python .cgi.

In particolare qualcosa di simile:

import cgi 
form = cgi.FieldStorage() 
value1 = form.getfirst("value1", "") 
value2 = form.getfirst("value2", "") 
value3 = form.getfirst("value3", "") 
logtext = form.getfirst("logText", "") 
Problemi correlati