CodeGym /Kurse /Python SELF DE /Arbeiten mit dem Netzwerk in der Praxis

Arbeiten mit dem Netzwerk in der Praxis

Python SELF DE
Level 23 , Lektion 3
Verfügbar

4.1 Verarbeitung von Antworten

Modul requests bietet bequeme Methoden zum Arbeiten mit Serverantworten.

Status-Codes

Neben der Antwort sendet der Server auch den Status der Anfrageverarbeitung. Die Statusinformation befindet sich in den Feldern status_code und reason. Beispiel unten:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # Gibt den Statuscode der Antwort aus
print(response.reason)  # Gibt die textliche Beschreibung des Status aus
print(response.ok)  # Gibt True zurück, wenn der Statuscode kleiner als 400 ist
        

Headers

Und natürlich, was wäre eine HTTP-Anfrage ohne Header? Wenn du Anfrage- oder Antwortheader benötigst, kannst du auf sie über das Feld headers zugreifen:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)  # Gibt die Antwortheader aus
print(response.headers['Content-Type'])  # Gibt den Wert eines bestimmten Headers aus
            

Antwortkörper

Die Antwort des Servers kann ein Byte-Set, Text, json oder xml enthalten. Wenn du weißt, was du genau vom Server anforderst, kannst du direkt ein Objekt des gewünschten Typs erhalten, indem du eine der Methoden/Felder nutzt:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)  # Gibt den Antwortkörper in Textform aus
print(response.json())  # Gibt den Antwortkörper in JSON aus
print(response.content)  # Gibt den Antwortkörper in Bytes aus
        

Mehr über Header (headers) und Antwortstatus erfährst du in den Vorlesungen über Netzwerktechnologie.

4.2 Fehlerbehandlung

Modul requests bietet Ausnahmen zur Fehlerbehandlung.

Der HTTP-Standard sieht keine Ausnahmen vor, stattdessen arbeitet er mit Fehlercodes (status_code). Wenn du möchtest, dass bei einem fehlgeschlagenen Antrag eine Python-Ausnahme ausgelöst wird, musst du explizit die Funktion raise_for_status() aufrufen.

Beispiel:


import requests

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
    response.raise_for_status()  # Erzeugt eine Ausnahme für Status-Codes 4xx und 5xx
except requests.exceptions.HTTPError as err:
    print(f"HTTP error occurred: {err}")
except Exception as err:
    print(f"Other error occurred: {err}")
else:
    print("Success!")
        

Mehr über Fehlercodes kannst du aus den Vorlesungen über Netzwerktechnologie erfahren.

4.3 Senden von Daten

Vor der Erfindung von JSON wurden große Datenmengen mittels „Formulare” gesendet. Ein Formular ist ein spezielles Objekt der Browserseite (und ein Datenstandard in HTTP). Wenn du Daten „über das Formular” senden möchtest, musst du einfach mit der Anfrage den Parameter data übergeben.

Wichtig! GET-Anfragen unterstützen keine Formulare, da sie keinen Anfragetext enthalten. Alle ihre Daten werden nur in der URL übergeben.

Senden von Daten in GET-Anfrage

In einer GET-Anfrage werden Daten durch URL-Parameter übertragen. Hier ein Beispiel:


import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # Gibt die URL mit hinzugefügten Parametern aus
    

Senden von Formulardaten

Wir nutzen eine POST-Anfrage, um Daten an den Server zu senden.

Beispiel:


import requests

data = {
    'username': 'example',
    'password': 'password'
}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
        

Senden von Dateien

Wenn du Binärdaten ins Internet senden möchtest, beispielsweise ein Bild hochladen, dann musst du deine Datei oder Dateien mit dem Parameter files in die Anfrage einfügen.

Beispiel:


import requests

files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

Einfach wie eins, zwei, drei. Wenn du mehrere Dateien senden möchtest, dann liste sie unter beliebigen Namen in der Variable files auf.

Wichtig! Vergiss nicht die Datei nach dem Senden zu schließen, um Ressourcenlecks zu vermeiden. Am besten verwendest du die with-Konstruktion, die die Datei nach Abschluss der Operation automatisch schließt:


import requests

with open('example.txt', 'rb') as f:
    files = {'file': f}
    response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

4.4 Login und Authentifizierung

API (Application Programming Interface) – das ist ein Satz von Regeln und Protokollen, die es verschiedenen Programmen erlauben, miteinander zu interagieren. Viele Websites und Dienste erlauben das Senden von Anfragen und die Arbeit mit ihrer API nur nach dem Login.

Nach erfolgreicher Anmeldung erhältst du ein spezielles Objekt, eine Sitzung (session), die eine einzigartige Nummer deiner „autorisierte Sitzung mit dem Server“ enthält. Für weitere Anfragen musst du dieses Objekt verwenden.

Authentifizierung

Um sich auf einem Server anzumelden, musst du eine Authentifizierung durchführen (Login-Prozess), wofür du mit der Anfrage Zugangsdaten senden musst.


import requests
from requests.auth import HTTPBasicAuth
        
response = requests.get('https://httpbin.org/basic-auth/user/pass', \ 
                        auth=HTTPBasicAuth('user', 'pass'))
print(response.status_code)
        
    

So sieht der Autorisierungsprozess aus, aber normalerweise wird er zusammen mit einer Sitzung verwendet.

Verwendung von Sitzungen

Sitzungen ermöglichen es, Parameter zwischen Anfragen zu speichern, wie cookies oder Informationen über die Benutzerautorisierung.


import requests

payload = {
    'username': 'your_username',
    'password': 'your_password'
}
            
# Erstellung einer Sitzung
session = requests.Session()
            
# Login auf der Website
login_response = session.post('https://example.com/login', data = payload)
            
# Weitere Arbeit unter der Sitzung des eingeloggten Benutzers
data_response = session.get('https://example.com/api/data')
print(data_response.json())
        
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION