Was ist der schnellste Weg zu HTTP GET in Python, wenn ich weiß, dass der Inhalt eine Zeichenfolge ist? Ich suche in der Dokumentation nach einem schnellen Einzeiler wie:
contents = url.get("http://example.com/foo/bar")
Aber alles, was ich mit Google finden kann, sind httplib
und urllib
- und ich kann in diesen Bibliotheken keine Verknüpfung finden.
Hat Standard Python 2.5 eine Verknüpfung in irgendeiner Form wie oben, oder sollte ich eine Funktion schreiben url_get
?
- Ich würde es vorziehen, die Ausgabe des Beschusses an
wget
oder nicht zu erfassencurl
.
python
http
networking
Frank Krueger
quelle
quelle
Antworten:
Python 3:
Python 2:
Dokumentation für
urllib.request
undread
.quelle
close
nach deinem anrufenread
. Ist das notwendigread
. Aber einwith
Block wäre klarer und sicherer für Jython usw.requests
funktioniert gutr = urllib2.urlopen("http://blah.com/blah")
und danntext = r.read()
. Es ist synchron, es wartet nur auf das Ergebnis in "Text".Sie können eine Bibliothek namens Anfragen verwenden .
Das ist ganz einfach. Dann können Sie so vorgehen:
quelle
pip install
). Für nicht reine Bibliotheken gibt es einen zusätzlichen Schritt: Sie müssenpip install
die Bibliothek auf eine Instanz von AWS Linux (dieselbe Lambdas-Variante der Betriebssystemvariante, auf der sie ausgeführt werden) und anschließend diese Dateien kopieren, damit Sie binär mit AWS Linux kompatibel sind. Die einzigen Bibliotheken, die Sie in Lambda nicht immer verwenden können, sind solche mit nur binären Verteilungen, die zum Glück ziemlich selten sind.pip install requests
.from botocore.vendored import requests
Verwendungresponse = requests.get('...')
Wenn Sie möchten, dass die Lösung mit httplib2 ein Oneliner ist, sollten Sie ein anonymes HTTP-Objekt instanziieren
quelle
Schauen Sie sich httplib2 an , das neben vielen sehr nützlichen Funktionen genau das bietet, was Sie wollen.
Wobei Inhalt der Antworttext (als Zeichenfolge) wäre und resp den Status und die Antwortheader enthalten würde.
Es ist zwar nicht in einer Standard-Python-Installation enthalten (erfordert jedoch nur Standard-Python), aber es lohnt sich auf jeden Fall, es sich anzusehen.
quelle
Mit der leistungsstarken
urllib3
Bibliothek ist das ganz einfach .Importiere es so:
Und stellen Sie eine Anfrage wie folgt:
Sie können auch Header hinzufügen:
Weitere Informationen finden Sie in der urllib3-Dokumentation .
urllib3
ist viel sicherer und einfacher zu bedienen als das eingebauteurllib.request
oder diehttp
Module und ist stabil.quelle
Die Lösung von theller für wget ist wirklich nützlich, aber ich habe festgestellt, dass sie den Fortschritt während des gesamten Downloadvorgangs nicht druckt. Es ist perfekt, wenn Sie eine Zeile nach der Druckanweisung in reporthook einfügen.
quelle
Hier ist ein Wget-Skript in Python:
quelle
Ohne weitere notwendige Importe funktioniert diese Lösung (für mich) - auch mit https:
Ich habe oft Schwierigkeiten, den Inhalt abzurufen, wenn ich keinen "User-Agent" in den Header-Informationen angegeben habe. Dann werden die Anfragen normalerweise mit etwas wie:
urllib2.HTTPError: HTTP Error 403: Forbidden
oder stornierturllib.error.HTTPError: HTTP Error 403: Forbidden
.quelle
So senden Sie auch Header
Python 3:
Python 2:
quelle
Wenn Sie speziell mit HTTP-APIs arbeiten, gibt es auch bequemere Optionen wie Nap .
So erhalten Sie beispielsweise seit dem 1. Mai 2014 Informationen von Github :
Weitere Beispiele: https://github.com/kimmobrunfeldt/nap#examples
quelle
Hervorragende Lösungen Xuan, Theller.
Nehmen Sie die folgenden Änderungen vor, damit es mit Python 3 funktioniert
Vor der von Ihnen eingegebenen URL sollte außerdem ein "http: //" stehen, da sonst ein unbekannter URL-Typfehler zurückgegeben wird.
quelle
Für
python >= 3.6
können Sie dload verwenden :Für
json
:Installieren:
pip install dload
quelle
Tatsächlich können wir in Python aus URLs wie aus Dateien lesen. Hier ist ein Beispiel für das Lesen von json aus der API.
quelle
Wenn Sie eine API auf niedrigerer Ebene wünschen:
quelle