Gibt es eine Möglichkeit, eine Datei mit POST aus einem Python-Skript zu senden?
python
post
file-upload
http-post
Schreibgeschützt
quelle
quelle
with open('report.xls', 'rb') as f: r = requests.post('http://httpbin.org/post', files={'report.xls': f})
stattdessen tun , damit die Datei nach dem Öffnen wieder geschlossen wird.Ja. Sie würden das
urllib2
Modul verwenden und mit demmultipart/form-data
Inhaltstyp codieren . Hier ist ein Beispielcode für den Einstieg - es ist ein bisschen mehr als nur das Hochladen von Dateien, aber Sie sollten in der Lage sein, ihn durchzulesen und zu sehen, wie er funktioniert:quelle
Das einzige, was Sie davon abhält, urlopen direkt für ein Dateiobjekt zu verwenden, ist die Tatsache, dass dem integrierten Dateiobjekt eine len- Definition fehlt . Eine einfache Möglichkeit besteht darin, eine Unterklasse zu erstellen, die urlopen mit der richtigen Datei versorgt. Ich habe auch den Content-Type-Header in der folgenden Datei geändert.
quelle
Es sieht so aus, als würden Python-Anfragen keine extrem großen mehrteiligen Dateien verarbeiten.
In der Dokumentation wird empfohlen, einen Blick darauf zu werfen
requests-toolbelt
.Hier ist die relevante Seite aus ihrer Dokumentation.
quelle
Die Poster- Bibliothek von Chris Atlee eignet sich sehr gut dafür (insbesondere für die Convenience-Funktion
poster.encode.multipart_encode()
). Als Bonus unterstützt es das Streaming großer Dateien, ohne eine ganze Datei in den Speicher zu laden. Siehe auch Python-Ausgabe 3244 .quelle
Ich versuche, Django Rest API zu testen und es funktioniert für mich:
quelle
close()
eine Datei vergessen .Vielleicht möchten Sie auch einen Blick auf httplib2 mit Beispielen werfen . Ich finde, dass die Verwendung von httplib2 prägnanter ist als die Verwendung der integrierten HTTP-Module.
quelle
requests
stattdessen empfehlen .quelle