750 Stimmen

Was ist der schnellste Weg zu HTTP GET in Python?

Was ist der schnellste Weg zu HTTP GET in Python, wenn ich weiß, dass der Inhalt eine Zeichenfolge sein wird? 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 y urllib - und ich kann in diesen Bibliotheken keine Abkürzung finden.

Hat Standard-Python 2.5 eine Abkürzung in irgendeiner Form wie oben, oder sollte ich eine Funktion schreiben url_get ?

  1. Ich würde es vorziehen, nicht die Ausgaben für die wget o curl .

1012voto

Nick Presta Punkte 27458

Python 3:

import urllib.request
contents = urllib.request.urlopen("http://example.com/foo/bar").read()

Python 2:

import urllib2
contents = urllib2.urlopen("http://example.com/foo/bar").read()

Dokumentation für urllib.request y read .

514voto

Verwenden Sie die Anfragen an Bibliothek:

import requests
r = requests.get("http://example.com/foo/bar")

Dann kannst du so etwas machen:

>>> print(r.status_code)
>>> print(r.headers)
>>> print(r.content)  # bytes
>>> print(r.text)     # r.content as str

Installieren Sie Requests, indem Sie diesen Befehl ausführen:

pip install requests

31voto

to-chomik Punkte 341

Wenn Sie möchten, dass die Lösung mit httplib2 zu sein oneliner betrachten Instanziierung anonyme Http-Objekt

import httplib2
resp, content = httplib2.Http().request("http://example.com/foo/bar")

20voto

Werfen Sie einen Blick auf httplib2 das - neben einer Vielzahl sehr nützlicher Funktionen - genau das bietet, was Sie wollen.

import httplib2

resp, content = httplib2.Http().request("http://example.com/foo/bar")

Dabei wäre content der Antwortkörper (als Zeichenkette) und resp würde die Status- und Antwort-Header enthalten.

Es ist zwar nicht in einer Standard-Python-Installation enthalten (sondern benötigt nur Standard-Python), aber es ist auf jeden Fall einen Blick wert.

17voto

Es ist einfach genug mit dem leistungsstarken urllib3 Bibliothek.

Importieren Sie es so:

import urllib3

http = urllib3.PoolManager()

Und stellen Sie einen Antrag wie diesen:

response = http.request('GET', 'https://example.com')

print(response.data) # Raw data.
print(response.data.decode('utf-8')) # Text.
print(response.status) # Status code.
print(response.headers['Content-Type']) # Content type.

Sie können auch Kopfzeilen hinzufügen:

response = http.request('GET', 'https://example.com', headers={
    'key1': 'value1',
    'key2': 'value2'
})

Weitere Informationen finden Sie auf der urllib3-Dokumentation .

urllib3 ist viel sicherer und einfacher zu benutzen als das eingebaute urllib.request o http Module und ist stabil.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X