Python HTTP Client Request – Wesentlicher Leitfaden
Das Python HTTP-Modul definiert Klassen, die die Client-Seite der HTTP- und HTTPS-Protokolle bereitstellen. In den meisten Programmen wird das HTTP-Modul nicht direkt verwendet, sondern mit dem urllib-Modul kombiniert, um URL-Verbindungen und Interaktionen mit HTTP-Anfragen zu handhaben. Heute lernen wir, wie man einen Python HTTP-Client verwendet, um eine HTTP-Anfrage zu stellen und dann den Antwortstatus zu analysieren und Daten aus dem Antwortkörper zu erhalten.
Python HTTP-Client
In diesem Beitrag zum Python HTTP-Modul werden wir versuchen, Verbindungen herzustellen und HTTP-Anfragen wie GET, POST und PUT zu machen. Lass uns anfangen.
Herstellen von HTTP-Verbindungen
Wir beginnen mit der einfachsten Sache, die das HTTP-Modul tun kann. Wir können leicht HTTP-Verbindungen mit diesem Modul herstellen. Hier ist ein Beispielprogramm:
import http.client
connection = http.client.HTTPConnection('www.python.org', 80, timeout=10)
print(connection)
Python HTTP GET
Nun werden wir den HTTP-Client verwenden, um eine Antwort und einen Status von einer URL zu erhalten. Schauen wir uns einen Code-Ausschnitt an:
import http.client
connection = http.client.HTTPSConnection("www.journaldev.com")
connection.request("GET", "/")
response = connection.getresponse()
print("Status: {} and reason: {}".format(response.status, response.reason))
connection.close()
In dem oben genannten Skript haben wir eine URL verwendet und den Status mit dem Verbindungsobjekt überprüft.
Denken Sie daran, eine Verbindung zu schließen, sobald Sie mit dem Verbindungsobjekt fertig sind. Beachten Sie auch, dass wir eine HTTPSConnection verwendet haben, um die Verbindung herzustellen, da die Website über das HTTPS-Protokoll bereitgestellt wird.
Erhalt von SSL: CERTIFICATE_VERIFY_FAILED-Fehler?
Als ich das obige Programm zum ersten Mal ausführte, erhielt ich folgenden Fehler im Zusammenhang mit SSL-Zertifikaten.
$ python3.6 http_client.py
Traceback (most recent call last):
File "http_client.py", line 4, in
connection.request("GET", "/")
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1239, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1285, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1234, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1026, in _send_output
self.send(msg)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 964, in send
self.connect()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1400, in connect
server_hostname=server_hostname)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 401, in wrap_socket
context=self, session=session)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 808, in init
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 1061, in do_handshake
self._sslobj.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 683, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748)
$
Erhalt der Header-Liste aus der Antwort
Aus der erhaltenen Antwort enthalten die Header normalerweise auch wichtige Informationen über die Art der vom Server zurückgesendeten Daten und den Antwortstatus. Wir können eine Liste der Header aus dem Antwortobjekt selbst erhalten. Schauen wir uns einen Code-Ausschnitt an, der eine leicht modifizierte Version des letzten Programms ist:
import http.client
import pprint
connection = http.client.HTTPSConnection("www.journaldev.com")
connection.request("GET", "/")
response = connection.getresponse()
headers = response.getheaders()
pp = pprint.PrettyPrinter(indent=4)
pp.pprint("Headers: {}".format(headers))
Python HTTP POST
Wir können auch Daten mit dem HTTP-Modul an eine URL POSTen und eine Antwort zurückbekommen. Hier ist ein Beispielprogramm:
import http.client
import json
conn = http.client.HTTPSConnection('www.httpbin.org')
headers = {'Content-type': 'application/json'}
foo = {'text': 'Hello HTTP #1 **cool**, and #1!'}
json_data = json.dumps(foo)
conn.request('POST', '/post', json_data, headers)
response = conn.getresponse()
print(response.read().decode())
Python HTTP PUT-Anfrage
Natürlich können wir auch eine PUT-Anfrage mit dem HTTP-Modul selbst ausführen. Wir werden das letzte Programm selbst verwenden. Schauen wir uns einen Code-Ausschnitt an:
import http.client
import json
conn = http.client.HTTPSConnection('www.httpbin.org')
headers = {'Content-type': 'application/json'}
foo = {'text': 'Hello HTTP #1 **cool**, and #1!'}
json_data = json.dumps(foo)
conn.request("PUT", "/put", json_data)
response = conn.getresponse()
print(response.status, response.reason)
Fazit
In dieser Lektion haben wir einfache HTTP-Operationen untersucht, die mit http.client durchgeführt werden können. Wir können auch einen Python-HTTP-Server mit dem SimpleHTTPServer-Modul erstellen. Python HTTP Client Request – Wesentlicher Leitfaden