[[Vorlage(Getestet, noble, jammy)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Python:Umgang mit der Programmiersprache Python] [:Terminal:einen Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(requests.webp, align=left)]] Das [:Python:]-Modul [https://requests.readthedocs.io/en/latest/ requests] {en} 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 {{{#!vorlage Paketinstallation python3-requests }}} installiert werden[1]. == via pip == Die aktuelle, stabile Version von requests kann mit Hilfe von [:pip:] in einem [:venv:] installiert werden[2]: {{{#!vorlage Befehl pip3 install requests }}} Wer requests unter Ubuntu 23.04 und neuer außerhalb eines venv installieren möchte, muss pip mit der [:pip/#Installation-durch-pip-erzwingen: 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: {{{#!code pycon >>> import requests }}} == GET-Request == Die einfachste Form eines GET-Request mit requests funktioniert wie folgt: {{{#!code pycon >>> response = requests.get('https://httpbin.org') >>> response }}} Ruft man das Response-Objekt auf (oder gibt es mit `print(response)` aus), wird der [https://developer.mozilla.org/en-US/docs/Web/HTTP/Status Statuscode] {en} 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: {{{#!code pycon >>> 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 '\n\n\n\n...' }}} Das Response-Objekt kennt noch eine ganze Reiher weiterer Attribute und Methoden, welche in der [https://requests.readthedocs.io/en/latest/api/#requests.Response Dokumentation] {en} aufgeführt sind. == Seite / API mit JSON-Antwort abfragen == Ruft man mit requests eine Seite / API ab, die die Antwort als [https://json.org JSON] {en} zurückliefert, kann man auf die Antwort direkt mit der `json()` Methode des Response-Objekts zugreifen: {{{#!code pycon >>> 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: {{{#!code pycon >>> 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 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes Basic Auth] {en} kann einem GET-Request direkt mitgegeben werden: {{{#!code pycon >>> 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 [https://requests.readthedocs.io/en/latest/user/authentication/#authentication in der Dokumentation] {en} 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 [https://requests.readthedocs.io/en/latest/ Dokumentation] {en} zu finden. = Links = * [https://requests.readthedocs.io/en/latest/ Dokumentation] {en} zu requests - sehr ausführlich und mit vielen Beispielen * [github:psf/requests:GitHub Seite] von requests #tag: Programmierung, Python