Ich muss einige Daten über HTTP PUT
in Python auf einen Server hochladen . Nach meiner kurzen Lektüre der urllib2-Dokumente wird nur HTTP ausgeführt POST
. Gibt es eine Möglichkeit, ein HTTP PUT
in Python durchzuführen?
220
Ich habe in der Vergangenheit eine Vielzahl von Python-HTTP-Bibliotheken verwendet und mich für " Anfragen " als meinen Favoriten entschieden. Bestehende Bibliotheken hatten ziemlich brauchbare Schnittstellen, aber Code kann für einfache Operationen einige Zeilen zu lang sein. Ein grundlegender PUT in Anfragen sieht folgendermaßen aus:
payload = {'username': 'bob', 'email': '[email protected]'}
>>> r = requests.put("http://somedomain.org/endpoint", data=payload)
Sie können den Antwortstatuscode dann überprüfen mit:
r.status_code
oder die Antwort mit:
r.content
Requests enthält viele synaktische Zucker und Verknüpfungen, die Ihnen das Leben erleichtern.
json=payload
Parameter, wenn sich die Daten im Body befinden sollen.quelle
requests
stattdessen die Verwendung einer Bibliothek.Httplib scheint eine sauberere Wahl zu sein.
quelle
Sie sollten sich das httplib-Modul ansehen . Sie sollten die gewünschte HTTP-Anfrage stellen können.
quelle
Ich musste dieses Problem auch vor einiger Zeit lösen, damit ich als Client für eine RESTful-API fungieren konnte. Ich habe mich für httplib2 entschieden, weil ich damit zusätzlich zu GET und POST auch PUT und DELETE senden konnte. Httplib2 ist nicht Teil der Standardbibliothek, kann aber problemlos im Käsegeschäft bezogen werden.
quelle
Sie können die Anforderungsbibliothek verwenden. Sie vereinfacht die Arbeit im Vergleich zum urllib2-Ansatz erheblich. Installieren Sie es zuerst von pip:
Weitere Informationen zum Installieren von Anforderungen .
Richten Sie dann die Put-Anfrage ein:
Informationen zur Anforderungsbibliothek finden Sie im Schnellstart . Ich denke, dies ist viel einfacher als urllib2, erfordert jedoch die Installation und den Import dieses zusätzlichen Pakets.
quelle
Dies wurde in Python3 verbessert und in der stdlib-Dokumentation dokumentiert
Die
urllib.request.Request
Klasse hat einenmethod=...
Parameter in Python3 erhalten.Einige Beispiele für die Verwendung:
quelle
Ich empfehle auch httplib2 von Joe Gregario. Ich benutze dies regelmäßig anstelle von httplib in der Standardbibliothek.
quelle
Haben Sie sich put.py angesehen ? Ich habe es in der Vergangenheit benutzt. Sie können auch einfach Ihre eigene Anfrage mit urllib hacken.
quelle
Sie können natürlich Ihre eigenen mit den vorhandenen Standardbibliotheken auf jeder Ebene von Sockets bis zur Optimierung von urllib rollen.
http://pycurl.sourceforge.net/
"PyCurl ist eine Python-Schnittstelle zu libcurl."
"libcurl ist eine kostenlose und benutzerfreundliche clientseitige URL-Übertragungsbibliothek, ... unterstützt ... HTTP PUT"
"Der Hauptnachteil von PycURL ist, dass es eine relativ dünne Schicht über libcurl ohne diese netten Pythonic-Klassenhierarchien ist. Dies bedeutet, dass es eine etwas steile Lernkurve hat, es sei denn, Sie sind bereits mit der C-API von libcurl vertraut."
quelle
Wenn Sie in der Standardbibliothek bleiben möchten, können Sie folgende Unterklassen erstellen
urllib2.Request
:quelle
Ein geeigneterer Weg, dies zu tun,
requests
wäre:Dies löst eine Ausnahme aus, wenn in der HTTP-PUT-Anforderung ein Fehler vorliegt.
quelle