Stiamo ricevendo alcuni dati POST di xml + file binari arbitrari (come immagini e audio) da un dispositivo che fornisce solo codifiche multipart/misti.può cherrypy ricevere POST multipart/mixed out of the box?
Ho impostato un gestore di caricamento/POST di cherrypy per il nostro destinatario. Sono riuscito a permettergli di fare un numero arbitrario di parametri usando multipart/form-data. Tuttavia, quando proviamo a inviare i dati multipart-mixed, non riceviamo alcuna elaborazione.
@cherrypy.expose
def upload(self, *args,**kwargs):
"""upload adapted from cherrypy tutorials
We use our variation of cgi.FieldStorage to parse the MIME
encoded HTML form data containing the file."""
print args
print kwargs
cherrypy.response.timeout = 1300
lcHDRS = {}
for key, val in cherrypy.request.headers.iteritems():
lcHDRS[key.lower()] = val
incomingBytes = int(lcHDRS['content-length'])
print cherrypy.request.rfile
#etc..etc...
Così, quando si inoltrano multipart/form-data, args e kwargs sono ben definiti.
args sono i campi del modulo, kwargs = hash di vars e valori. Quando invio multipart/mixed, args e kwargs sono vuoti, e ho cherrypy.request.rfile come le prime informazioni POST.
La mia domanda è: cherrypy ha un gestore integrato per gestire la codifica multipart/mixed e chunked per il POST? O dovrò sovrascrivere il cherrypy.tools.process_request_body e rotolare il mio decodificatore?
Sembra che il server wsgi incorporato con cherrypy gestisca questo come parte della specifica HTTP/1.1, ma non riesco a trovare la documentazione in cherrypy per accedere a questa funzionalità.
... per chiarire
sto utilizzando la versione più recente 3.1.1 o così di CherryPy.
La creazione di un modulo predefinito comporta solo l'impostazione di parametri nella funzione di caricamento.
Per/form-data multipart, Ho chiamato ricciolo -F [email protected] -F param2 = -F someText [email protected] http://destination:port/upload
In questo esempio, ottengo :
args = ['param1','param2','param3]
kwargs = {'param1':CString<>, 'param2': 'sometext', 'param3':CString<>}
Quando si tenta di inviare il multipart/mixed, ho provato a guardare il request.body, ma continuai a ottenere Nessuno per questo, indipendentemente dalle impostazioni del trattamento del corpo.
L'ingresso stiamo ottenendo è in arrivo come questo:
user-agent:UNTRUSTED/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1
content-language:en-US
content-length:565719
mime-version:1.0
content-type:multipart/mixed; boundary='newdivider'
host:192.168.1.1:8180
transfer-encoding:chunked
--newdivider
Content-type: text/xml
<?xml version='1.0' ?><data><Stuff>....
etc...etc...
--newdivider
Content-type: image/jpeg
Content-ID: file://localhost/root1/photos/Garden.jpg
Content-transfer-encoding: binary
<binary data>
Ho un vago sospetto che il multipart/mixed è il problema che CherryPy è appena mi dà solo il rfile. Il nostro obiettivo è far sì che la cherrypy elabori il corpo nelle sue parti con una elaborazione minima sul lato ricevente (cioè lascia che la cherrypy faccia la sua magia). Se questo ci richiede di essere più duri nel formato di invio per essere un tipo di contenuto che piace alla cherrypy, allora così sia. Quali sono i formati accettati? È solo multipart/form-data?
quale versione di cherrypy e puoi creare un modulo HTML di esempio? – llimllib
Invece di rfile, guarda cherrypy.request.corpo quando Content-Type non è form-data. – fumanchu