Wie sende ich ein "multipart / related" mit Anfragen in Python?

9

Ich versuche, eine mehrteilige / verwandte Nachricht mit Anfragen in Python zu senden. Das Skript scheint einfach genug zu sein, mit der Ausnahme, dass Anfragen nur das Senden von mehrteiligen / Formulardaten ermöglichen, obwohl ihre Dokumentation dies nicht eindeutig auf die eine oder andere Art angibt.

Mein Anwendungsfall ist das Senden von Soap mit Anhängen. Ich kann ein Wörterbuch mit den zwei Dateien bereitstellen, deren Inhalt eine Test-Soap-Nachricht ist, und ein Testdokument, das ich zu senden versuche. Die erste enthält die Soap-Nachricht mit allen Anweisungen, die zweite ist das eigentliche Dokument.

Wenn ich jedoch keinen Header-Wert angegeben habe, scheint nur bei Verwendung der Option files die Option multipart / form-data zu verwenden. Aber wenn ich Header vorschlage, um einen anderen Multipart-Typ zu spezifizieren, scheint Requests die Mime-Boundary-Information nicht hinzuzufügen.

%Vor%

Gibt es eine Möglichkeit, dies mithilfe von Anfragen zu erledigen? Oder gibt es ein anderes Werkzeug, das ich betrachten sollte?

    
Zach Melnick 01.04.2013, 15:41
quelle

2 Antworten

20

Sie müssen die MIME-Codierung selbst erstellen. Sie können dies mit dem Paket email.mime tun:

%Vor%

Ich nahm an, dass die XML-Datei UTF-8 verwendet, wahrscheinlich möchten Sie auch einen Zeichensatz für den Eintrag document festlegen.

requests kann nur multipart/form-data post bodies erstellen; Das multipart/related wird nicht häufig verwendet.

    
Martijn Pieters 02.04.2013, 12:03
quelle
1

Ich arbeite mit requests und dem Google Drive API "Multipart" Upload.

Die email.mime -Lösung funktionierte nicht mit der API von Google. Daher habe ich in den Quellcode requests geforscht, um zu sehen, wie er multipart/form-data bodies implementiert.

requests verwendet den Helfer urllib3.filepost.encode_multipart_formdata() , der umbrochen werden kann, um multipart/related :

bereitzustellen %Vor%

Nun können wir mit encode_multipart_related() ein (body, content_type) Tupel erstellen, das den Anforderungen von Google entspricht:

%Vor%

Hier sehen Sie ein vollständiges Beispiel, das unsere encode_media_related() verwendet, um eine Hallo-Welt-Datei mit der google_auth -Bibliothek auf Google Drive hochzuladen.

%Vor%     
ender672 06.12.2017 20:25
quelle