CodeGym /Kurse /Python SELF DE /Verwenden von HttpClient

Verwenden von HttpClient

Python SELF DE
Level 23 , Lektion 4
Verfügbar

5.1 Einführung in HttpClient

In Python gibt es ebenso wie in vielen anderen Programmiersprachen einen Standard HttpClient. In Python nennt man ihn http.client, und er ermöglicht es, niedrigstufige HTTP-Anfragen durchzuführen und mit HTTP-Antworten zu arbeiten. Er erlaubt es, Verbindungen zu HTTP-Servern herzustellen und mit ihnen zu interagieren.

Ein niedrigstufiges Modul wie http.client bietet eine detailliertere Kontrolle über HTTP-Operationen, erfordert aber mehr Code, um Aufgaben zu erledigen. Im Gegensatz dazu bieten höherstufige Module wie requests, ein einfacheres Interface, das viele Implementierungsdetails verbirgt.

Hauptfunktionen von http.client

Das Modul http.client bietet folgende Hauptfunktionen:

  • Erstellen von HTTP-Verbindungen.
  • Versenden von HTTP-Anfragen.
  • Lesen von HTTP-Antworten.
  • Verarbeitung der Header und des Inhalts von Anfragen und Antworten.

Im Gegensatz zum Modul requests ist http.client mehr niedrigstufig und legt großen Wert auf die Feinheiten der Arbeit mit HTTP-Anfragen.

Hauptklassen und Methoden von http.client

Klasse/Methode Beschreibung
HTTPConnection Erstellen einer HTTP-Verbindung.
HTTPSConnection Erstellen einer HTTPS-Verbindung.
request(method, url, ...) Versenden einer HTTP-Anfrage.
getresponse() Empfangen der Antwort auf die Anfrage.
response.status Statuscode der Antwort.
response.reason Textbeschreibung des Antwortstatus.
response.read() Lesen der Antwortdaten.
response.getheaders() Alle Antwortheader erhalten.
response.getheader(name) Wert eines bestimmten Headers erhalten.

Im Folgenden werden wir einige davon genauer betrachten.

5.2 Ausführen einer GET-Anfrage

Um Anfragen mit der http.client-Bibliothek auszuführen, folge diesem Ablauf:


Verbindung herstellen
Anfrage senden
Antwort erhalten
Verbindung schließen

Es ist wichtig zu beachten, dass das Schließen der Verbindung nach der Nutzung notwendig ist, um Ressourcen freizugeben und Speicherlecks zu vermeiden. Das ist besonders wichtig bei der Arbeit mit vielen Anfragen oder in langlebigen Anwendungen.

Beispiel für die Verwendung von HTTPConnection für eine normale HTTP-Anfrage:


import http.client

# Erstellen einer HTTP-Verbindung
conn = http.client.HTTPConnection("example.com")
            
# Senden einer GET-Anfrage
conn.request("GET", "/")
            
# Antwort erhalten
response = conn.getresponse()
print(response.status, response.reason)
            
# Verbindung schließen
conn.close()
        

Beispiel für die Verwendung von HTTPSConnection:


import http.client

# Erstellen einer Verbindung
conn = http.client.HTTPSConnection("jsonplaceholder.typicode.com")
            
# Senden einer GET-Anfrage
conn.request("GET", "/posts/1")
            
# Antwort erhalten
response = conn.getresponse()
print(response.status, response.reason)
            
# Lesen und Dekodieren der Antwortdaten
data = response.read().decode('utf-8')
print(data)
            
# Alle Antwortheader erhalten
headers = response.getheaders()
for header in headers:
    print(f"{header[0]}: {header[1]}")
            
# Verbindung schließen
conn.close()
        

Ein bisschen länger als beim Verwenden von requests, oder?

5.3 Ausführen einer POST-Anfrage

Eine POST-Anfrage mit http.client wird sehr ähnlich wie eine GET-Anfrage ausgeführt, jedoch müssen die Daten in einen json-String selbst verpackt werden, und man muss den Datentyp manuell angeben – indem man den Header Content-Type hinzufügt.

Beispiel:


import http.client
import json

# Senden einer POST-Anfrage
conn.request("POST", "/posts", body=payload, headers=headers)
        

Als body muss man ein json-Objekt übergeben, das in einen String serialisiert ist, und als headers – ein Dictionary, das Informationen über den Datentyp enthält.

Diese könnten zum Beispiel so aussehen:


# Daten zum Senden
payload = json.dumps({
    "title": "foo",
    "body": "bar",
    "userId": 1
})
            
# Header – Typ des gesendeten Inhalts
headers = {
    'Content-Type': 'application/json'
}
        

Der vollständige Code für die POST-Anfrage sieht dann so aus:


import http.client
import json

# Daten zum Senden
payload = json.dumps({
    "title": "foo",
    "body": "bar",
    "userId": 1
})
            
# Header
headers = {
    'Content-Type': 'application/json'
}
            
# Erstellen einer Verbindung
conn = http.client.HTTPSConnection("jsonplaceholder.typicode.com")
            
# Senden einer POST-Anfrage
conn.request("POST", "/posts", body=payload, headers=headers)
            
# Antwort erhalten
response = conn.getresponse()
print(response.status, response.reason)
            
# Lesen und Dekodieren der Antwortdaten
data = response.read().decode('utf-8')
print(data)
            
# Verbindung schließen
conn.close()
        

5.4 Fehlerbehandlung bei der Ausführung von Anfragen

Ich denke, es wird auch nützlich sein, ein Beispiel zur Fehlerbehandlung zu geben, da es sich vom Verhalten von requests unterscheidet. Im Modul http.client wird die Ausnahme automatisch ausgelöst, wenn es Verbindungsprobleme oder andere HTTP-Fehler gibt.

Beispiel:


import http.client

try:
    # Erstellen einer Verbindung
    conn = http.client.HTTPSConnection("jsonplaceholder.typicode.com")
            
    # Senden einer GET-Anfrage
    conn.request("GET", "/posts/1")
            
    # Antwort erhalten
    response = conn.getresponse()
    print(response.status, response.reason)
            
    # Lesen und Dekodieren der Antwortdaten
    data = response.read().decode('utf-8')
    print(data)
            
except http.client.HTTPException as e:
    print("HTTP-Fehler aufgetreten:", e)
except Exception as e:
    print("Ein Fehler ist aufgetreten:", e)
finally:
    # Verbindung schließen
    conn.close()
        

Was soll ich sagen? Die Verwendung des Moduls requests ist natürlich einfacher. Aber! Viele Module und Frameworks verwenden unter der Haube genau den niedrigstufigen http.client. Du solltest wissen, wie man damit umgeht, damit du sie richtig konfigurieren kannst.

1
Umfrage/Quiz
Serialisierung, Level 23, Lektion 4
Nicht verfügbar
Serialisierung
Serialisierung
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION