Requests
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 24.04 Noble Numbat
Ubuntu 22.04 Jammy Jellyfish
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Das Python-Modul requests 🇬🇧 ist eine Bibliothek zum Senden von HTTP-Anfragen ("Requests") sowie Aufbereitung der empfangenen Antworten. Auch wenn es Alternativen gibt, ist requests im Python-Umfeld sehr populär und wird viel genutzt. Dies liegt unter anderem daran, dass das Modul sehr ausführlich dokumentiert, funktionsreich und einfach zu nutzen ist.
Installation¶
Paketquellen¶
Das Modul ist normalerweise in der Standardinstallation von Python enthalten, kann ansonsten aber über das Paket
python3-requests
Befehl zum Installieren der Pakete:
sudo apt-get install python3-requests
Oder mit apturl installieren, Link: apt://python3-requests
installiert werden[1].
via pip¶
Die aktuelle, stabile Version von requests kann mit Hilfe von pip in einem venv installiert werden[2]:
pip3 install requests
Wer requests unter Ubuntu 23.04 und neuer außerhalb eines venv installieren möchte, muss pip mit der entsprechenden Option aufrufen.
Benutzung¶
Das Schema zur Benutzung von requests innerhalb von Python Skripten oder dem interaktiven Interpreter ist wie folgt: man führt den Befehl requests.HTTP-BEFEHL(URL, [OPTIONEN]
aus und erhält ein Response-Objekt zurück, was die Antwort auf den Request enthält. requests kennt alle gängigen HTTP-Befehle, also GET, OPTIONS, HEAD, POST, PUT, PATCH und DELETE.
Um requests zu nutzen muss man das Modul zuerst importieren:
1 | >>> import requests |
GET-Request¶
Die einfachste Form eines GET-Request mit requests funktioniert wie folgt:
1 2 3 | >>> response = requests.get('https://httpbin.org') >>> response <Response [200]> |
Ruft man das Response-Objekt auf (oder gibt es mit print(response)
aus), wird der Statuscode 🇬🇧 zurückgegeben, hier also 200
(= "OK").
Das Response-Objekt hat eine ganze Reihe von Attributen, über die man sich z.B. den Header, das Encoding oder den Inhalt der Antwort ausgeben lassen kann:
1 2 3 4 5 6 | >>> response.headers {'Date': 'Sun, 11 Dec 2022 14:45:06 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Content-Length': '9593', 'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true'} >>> response.encoding 'utf-8' >>> response.text '<!DOCTYPE html>\n<html lang="en">\n\n<head>\n...' |
Das Response-Objekt kennt noch eine ganze Reiher weiterer Attribute und Methoden, welche in der Dokumentation 🇬🇧 aufgeführt sind.
Seite / API mit JSON-Antwort abfragen¶
Ruft man mit requests eine Seite / API ab, die die Antwort als JSON 🇬🇧 zurückliefert, kann man auf die Antwort direkt mit der json()
Methode des Response-Objekts zugreifen:
1 2 3 | >>> response = requests.get('https://dummyjson.com/products/1') >>> response.json() {'id': 1, 'title': 'iPhone 9', 'description': '...'} |
POST-Request¶
Möchte man mit requests eine POST-Request absetzen, muss man dem Aufruf die Daten für den POST-Request, auch "Payload" genannten, mitgeben:
1 2 3 4 5 6 7 8 | >>> response = requests.post('http://httpbin.org/post', data=payload) >>> response.text ... {"form": { "answer": "42", "foo": "bar"\n }, } ... |
Authentifizierung¶
requests unterstützt auch die Abfrage von Seiten, die Authentifizierung verlangen. Die einfachste Form namens Basic Auth 🇬🇧 kann einem GET-Request direkt mitgegeben werden:
1 2 3 | >>> requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass')) >>> response.text '{\n "authenticated": true, \n "user": "user"\n}\n' |
requests kennt noch eine Reihe weiterer Authentifizierungsmethoden inklusive den sichereren Methoden wie OAuth1 und OAuth2. Details dazu sind in der Dokumentation 🇬🇧 zu finden.
weitere Funktionen¶
Das requests-Modul hat noch eine ganze Reihe weitere Funktionalitäten. So kann es z.B. mit Cookies, Sessions und Streams umgehen oder Proxy-Server nutzen. Informationen zu diesen und weiteren Funktionen sind in der Dokumentation 🇬🇧 zu finden.
Links¶
Dokumentation 🇬🇧 zu requests - sehr ausführlich und mit vielen Beispielen
GitHub Seite von requests