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

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: