2013-07-01 8 views
19

Ich habe eine Form-Daten sowie eine Datei in der gleichen POST gesendet werden. Zum Beispiel: {duration: 2000, file: test.wav}. Ich sah die vielen Threads hier auf multipart/form-data-Posting mit Python-Anfragen. Sie waren nützlich, insbesondere this one.mehrteilige Daten POST mit Python-Anfragen: keine Multipart-Grenze wurde gefunden

Meine Musteranforderung ist wie folgt:

files = {'file': ('wavfile', open(filename, 'rb'))} 
    data = {'duration': duration} 
    headers = {'content-type': 'multipart/form-data'} 
    r = self.session.post(url, files=files, data=data, headers=headers) 

Aber wenn ich den obigen Code ausführen, bekomme ich diesen Fehler:

5: 59: 55,338 Dbg 09900 [DEBUG] Beheben Ausnahme von Handler [ null]: org.springframework.web.multipart.MultipartException: Multipart-Servlet-Anfrage konnte nicht analysiert werden; Die verschachtelte Ausnahme ist org.apache.commons.fileupload.FileUploadException: Die Anforderung wurde abgelehnt, weil keine Multipart-Grenze gefunden wurde.

Also meine Fragen sind: 1) Wie kann ich den Inhalt der Anfrage sehen gesendet werden? Wireshark konnte nicht verwendet werden, nicht über das Netzwerk. 2) Warum fehlt die Grenze in den codierten Daten? Habe ich etwas vermisst, bitte weisen Sie darauf hin.

Antwort

35

Sie sollten diese Kopfzeile NIEMALS selbst setzen. Wir setzen den Header richtig mit der Grenze. Wenn Sie diesen Header setzen, werden wir nicht und Ihr Server wird nicht wissen, welche Grenze zu erwarten ist (da es der Kopfzeile hinzugefügt wird). Entfernen Sie Ihre benutzerdefinierte Content-Type-Kopfzeile und alles wird gut.

6

Das Herausnehmen des Content-Type Headers mit expliziten "multipart/form-data" funktioniert!