3

HTTP Requests in Python (Anfänger-Tutorial)

Lerne die Grundlagen von HTTP und wie man es mit Hilfe der request library in Python für verschiedene Aufgaben nutzen kann.

In diesem Tutorial zeige ich dir, wie man ein Bild herunterlädt, eine GET Request ausführst, Parameter an eine URL zu übergeben und wie du POST Requests ausführst, um deine Daten entsprechend eines bestimmten Pfads zu teilen. Außerdem erfährst du, wie du eine JSON Antwort erhältst, um dynamischere Operationen ausführen zu können.

Hier eine kurze Übersicht zu den Inhalten:

  • HTTP
  • Python-Bibliotheken, um HTTP Anfragen auszuführen
  • HTTP-Requests in Python
  • Benutzen der GET Request
  • Download und speichern eines Bildes, unter Verwendung der Request Module
  • Parameter an eine URL übergeben
  • Benutzen der POST Request
  • JSON Antwort

HTTP

Die Abkürzung HTTP steht für „Hypertext Transfer Protocol“ und bezeichnet ein Protokoll, mit dem sich Daten in einem Netzwerk übertragen lassen. Die wichtigste Anwendung von HTTP ist die Übertragung von Internetseiten und Daten zwischen einem Webserver und -browser.

Hier ein Beispiel, um dir das kurz zu erklären: Du kannst den Browser (HTTP-Client) verwenden, um mit Hilfe von Google nach einem Bild von einem Hund zu suchen. Der Browser sendet deine Anfrage (HTTP-Request) an den HTTP Server (Webserver), in dem Fall an einen Ort wo das Bild von einem Hund hinterlegt ist. Der Server bearbeitet deine Anfrage und schickt seine Antwort (HTTP-Response) als Status Code mit dem angefragten Inhalt zurück. Diese Kommunikation ist auch als Client-Server-Prinzip bekannt.

Python-Bibliotheken, um HTTP Requests zu erstellen

Es gibt sehr viele verschiedene Bibliotheken, um HTTP Requests in Python zu erstellen. Diese sind zum Beispiel httplib, urllib, httplib2, treq usw., aber Requests selbst ist die einfachste und am besten dokumentierte Bibliothek. Hiermit ist es einfacher HTTP Requests auszuführen und insgesamt ist zum Erstellen einer HTTP Request viel weniger Code benötigt, als bei anderen HTTP Bibliotheken.

Um die request Befehle in deiner Entwicklungsumgebung zu nutzen, musst du zuerst die Bibliothek über pip in deine Entwicklungsumgebung importieren. Das machst du mit folgendem Code:

pip install requests

Requests (Software) in Python

Laut Wikipedia ist Requests eine Python HTTP Bibliothek, die unter der Apache-Lizenz 2.0 veröffentlicht wurde. Ziel dieses Projekts und dieser Software ist es, HTTP Requests einfacher und benutzerfreundlicher zu gestalten. Die aktuelle Version ist 2.23.0.

Benutzen der GET requests

GET ist die am meisten genutzte HTTP Request Methode. Du sie benutzen, um eine Ressource, z.B. Informationen einer Website, von einem HTTP Server anzufordern.

Um die GET Request zu nutzen, musst du folgenden Befehl in deine Entwicklungsumgebung eingeben und bei allen weiteren Befehlen beibehalten:

import requests

Anschließend kannst du Daten von einer bestimmte Ressource (Webseite) abrufen, indem du 'request.get('specific_url')' eingibst, wobei 'r' spezifisch für response steht. Theoretisch könntest du deinen Code auch mit 'response' anstatt nur 'r' schreiben. In unserem Beispiel wollen wir Daten von der lerneprogrammieren.de-Webseite abrufen.

r = requests.get("https://lerneprogrammieren.de")

Status Codes

Status Codes werden von einem Server als Antwort auf die Anfrage (request) eines Klienten über den Browser gegeben. Dafür kannst du ganz einfach den folgenden Code nutzen:

r.status_code

Wenn du als Output 200 bekommst, bedeutet das, dass dein Status Code okay ist und deine Anfrage erfolgreich war. Insgesamt sieht das dann so aus:

Input:

import requests
r = requests.get("https://lerneprogrammieren.de")

print('Status Code:')
print(r.status_code)

Output:

python http requests status code

Header

Über Header kannst du nützliche Informationen erhalten, wie z.B. die Art des Inhalts der Antwortnutzlast oder das Zeitlimits zur Zwischenspeicherung der Antwort. Um dir den Header anzeigen zu lassen, greife auf den folgenden Befehl zurück:

r.headers

Die Serverantwort kannst du dann als Python Dictionary lesen. Dieses Dictionary ist ein spezielles, da es nur für HTTP-Header erstellt wurde. Die Header sind nicht abhängig von Groß- und Kleinschreibung und du kannst daher in beliebiger Schreibweise auf die Header zugreifen. So sieht die Server Antwort in einem Python Dictionary aus:

Input:

import requests
r = requests.get("https://lerneprogrammieren.de")

print('Status Code')
print(r.status_code)

print('Headers')
print(r.headers)

Output:

python http requests headers

Daten aus der Antwort (Response Content)

Wenn du weiter mit dem Befehl 'r.text' arbeitest, kannst du dir den gesamten HTML-Code anzeigen lassen, der zum Erstellen der Webseite von lerneprogrammieren.de notwendig ist. Das sieht dann so aus:

Input:

import requests
r = requests.get("https://lerneprogrammieren.de")

print (r.text)

Output:

python http requests print

Den kompletten Output werde ich dir jetzt ersparen, da sonst kein Platz für weitere Tipps und Tricks in diesem Tutorial wäre.

Verstanden bis hierhin? Super, weiter geht’s mit dem Download von Bildern.

Herunterladen und Speichern von Bildern mit Hilfe der Request Module

Um Bilder mit Hilfe der Request Befehle herunterladen zu können, musst du zuerst wieder das Request Modul in deine Entwicklungsumgebung importieren. Abschließend verweist du mit dem entsprechenden Befehl auf die URL des Bildes, welches du empfangen möchtest. In diesem Beispiel hier werden wir das Logo von lerneprogrammieren.de herunterladen. Das geht so:

import requests
receive = requests.get('https://lerneprogrammieren.de/wp-content/uploads/Logo-blau3-500x76.png')

Um zu testen, ob deine Anfrage erfolgreich war, kannst du in deinem Terminal 'receive' eingeben, Enter klicken und daraufhin zeigt es dir den Statuscode der Anfrage an. Ist dieser wieder 200, so war deine Anfrage erfolgreich.

Output:

python http requests download image

Bis jetzt haben wir das Bild nur erfolgreich angefragt und es liegt in unserem Zwischenspeicher. Wie bekommt man es nun direkt auf den Computer? Stelle dazu sicher, dass sich deine Entwicklungsumgebung im Terminal von deinem Computer befindet (und nicht z.B. auf einer Webseite oder Plattform).

Folgende Befehle musst du kennen, um das Bild herunterzuladen:

'with': damit stellst du sicher, dass dein Bild beim Download einem bestimmten, von dir festgelegten Pfad folgt und es an genau der Stelle gespeichert wird, wo du es haben willst.

'r': mit Hilfe von r konvertierst du einfach Stränge in binäre Stränge.

'wb': ist der passende Befehl, um dein File zu öffnen bzw. es in dem von dir ausgewählten Ordner zu speichern.

Probiere nun den folgenden Code in deiner Entwicklungsumgebung aus. Achte darauf, dass du als Speicherpfad natürlich den Pfad auf deinem eigenen Computer verwendest.

import requests
receive = requests.get("https://lerneprogrammieren.de/wp-content/uploads/Logo-blau3-500x76.png")

bild = open('logo.png', 'wb') 
bild.write(receive.content)
bild.close()

Das abgespeicherte Bild:

python http requests logo download

… und jetzt im entsprechenden Ordner nachschauen, ob das Bild dort gespeichert wurde.

Logo blau3

Dieses Bild sollte nach Ausführung des Skripts in deinem Projektordner liegen

Hat geklappt?! Weiter geht’s!

Parameter an eine URL übergeben

Wenn du Daten senden möchtest, dann ist es oft am einfachsten, indem du das im Query-String der URL machst und dann die URL sendest. Requests hilft dir, deine Daten einem Dictionary zu übergeben, indem du bestimmte Schlüsselworte/-argumente benutzt und erstellt dir dann eine URL.

Als Beispiel nehmen wir einmal an, dass du lerne1=wert1 und programmieren2=wert2 an httpbin.org/get übergeben willst. Dazu benutzt du den folgenden Code.

Um die erzeugte URL anzeigen zu lassen, benutzt du einfach wieder die print Funktion und kannst direkt sehen, ob deine URL richtig erzeugt wurde.

import requests
payload = {'lerne1':'wert1','programmieren2':'wert2'}
r = requests.get("http://httpbin.org/get", params=payload)

print(r.url)
http://httpbin.org/get?lerne1=wert1&programmieren2=wert2

Benutzen der POST Request

POST Request ist die Methode, die am häufigsten genutzt wird, um Daten in einer spezifischen Form an einen Server zu senden oder diesen zu aktualisieren. Um deine Daten zu senden, erstellst du ein Dictionary namens 'pload' und dein Argument wird dann als Beitrag der POST Request gesendet. Probiere es einmal mit dem folgende Code aus:

import requests
pload = {'username':'Daniel','password':'meinPasswort'}
r = requests.post("https://httpbin.org/post", pload)
print(r.text)

Nach deinem print Befehl, erhältst du dann diesen Output:

python http requests post json

Dieser Output ist die JSON Antwort von der „httpbin“ Webseite zusammen mit den Daten, die du in einer spezifischen Form zuvor angelegt hast.

Sicher fragst du dich jetzt, was eine JSON Antwort ist und woher sie kommt. Das will ich dir jetzt erklären.

JSON Antwort

JSON steht für „Java Script Object Notation“ und ist die am häufigsten verwendete Methode zum Tauschen von Datenformaten. Es ist einfach zu lesen und schreiben und basiert auf der Programmiersprache „JavaScript“. JSON basiert als plattformunabhängiges Format auf Objekten, bei denen Daten in der Form des „Schlüssel-Wert“-Paares vorliegen, wie du eben schon in der POST Request gelernt hast.

Konvertieren von JSON in ein Python Dictionary

Im folgenden Code kannst du sehen, dass der 'r.json()' Befehl ein Python Dictionary mit der JSON Antwort kreiert, welche von der „httpbin“ Webseite kommt.

import requests 
pload = {'username':'Daniel','password':'meinPasswort'} 
r = requests.post("https://httpbin.org/post", pload)
print(r.json())

Das folgende Ergebnis ist dein Python Dictionary und außerdem die sogenannten „key-values“.

python http requests post request

Deine JSON Daten im Python Dictionary kannst du als Variable speichern, um damit dann dynamischere Operation durchzuführen. Schau dir dazu den folgenden Code an:

import requests 
pload = {'username':'Daniel','password':'meinPasswort'} 
r = requests.post("https://httpbin.org/post", pload)
r_dictionary = r.json()
print(r_dictionary['form'])

Daraufhin zeigt es dir deine Daten in genau der Form an, die du am Anfang eingegeben hast und jetzt wieder sehen wolltest.

Output:

python http requests post json dictionary

Fazit

Herzlichen Glückwunsch, du hast das Tutorial zum Thema HTTP Requests erfolgreich abgeschlossen und die Grundlagen von HTTP gelernt! Außerdem weißt du jetzt, wie man die Requests Bibliothek in Python verwenden kann, um verschiedene Anfragen und Anwendungen damit durchzuführen.

Hast du weitere Fragen oder Anmerkungen zu diesem Thema? Wende dich in den Kommentaren an mich!

  • 8. April 2020
Click Here to Leave a Comment Below 3 comments
Mathias - 6. März 2022

Bin neu in Python unterwegs und hatte nach Anleitungen gesucht. Diese hier ist echt super, hat bisher viel Spaß gemacht.

Reply
Fabio - 19. März 2022

Super Tutorial :)

Reply
Helmut - 16. März 2023

Endlich mal eine einfache und gut lesbare Einführung. Weiter so!

Reply

Leave a Reply: