Die Python-Bibliothek Requests stellt HTTP-Anfragen

adisa, Fotolia

Große Anfrage

Python rühmt sich seiner zahlreich bereits enthaltenen Bibliotheken. Doch die gute alte Urllib2 hat ihre Probleme mit dem modernen Web, die Python-Requests durch intuitive Klassen und Sitzungsverwaltung löst.
Das Titelthema im ADMIN 04/14 "Vernetzt speichern" sind Netzwerkdateisysteme, etwa Samba 4, verteilter Storage mit Ceph & GlusterFS und der Unix-Klassiker ... (mehr)

Das in Python eingebaute Modul zum Abrufen von Webseiten heißt Urllib2 – entwickelt für "eine andere Zeit und ein anderes Web", wie die Macher der Bibliothek Python-Requests [1] urteilen. Ihr Gegenvorschlag ist hingegen bereit für komplexere Aufgaben als das bloße Herunterladen von Seiteninhalten. Moderne Webdienste erfordern verschiedene Authentifizierungsmethoden, das Senden und Empfangen von Daten in verschiedenen Formaten und andere Techniken, mit denen Urllib2 nur mit einigem Aufwand zurechtkommt.

Ins Gepäck

Die Requests-Bibliothek ist über das Python-Paketverwaltungswerkzeug PIP schnell installiert:

pip install requests

Des Weiteren steht den Benutzern der meisten Linux-Distributionen das Paket »python-requests« in den Repositories zur Verfügung. Diese sind zwar etwas älter – Ubuntu 13.10 und Fedora 20 bringen Version 1.2.3 der Requests-Bibliothek statt der aktuellen 2.2.1 mit – aber die Schnittstelle hat sich trotz Versionssprung nur im Detail geändert.

Zur Sache

Den Kern der Bibliothek bildet die »Response« -Klasse. Ein Objekt dieser Klasse erzeugt unter anderem ein Aufruf der Methode »requests.get()« :

import requests
r = requests.get('http://www.admin-magazin.de')

Der Befehl verschickt eine »GET« -Anfrage an die angegebene URL und das resultierende Reponse-Objekt – hier in der Variablen »r« abgelegt – enthält die wesentlichen Eigenschaften der Server-Antwort als Attribute verpackt. Auf die gleiche Weise laufen andere HTTP-Kommandos ab: »requests.post()« schickt eine »POST« -Anfrage, die »requests« -Methoden »put()« , »delete()« , »head()« und »options()« funktionieren ebenso.

All diese Methoden übergeben beliebige Parameter in Form eines Python-Dictionary mit dem »params« -Argument. Der folgende Aufruf etwa ruft die Such-URL der ADMIN-Magazin-Webseite auf und definiert den Suchbegriff über den Parameter »SearchText« als »Python« :

requests.get('http://www.admin-magazin.de/content/search', params={'SearchText': 'Python'})

Auf die gleiche Weise definiert der »data« -Parameter mitzusendende Daten, wie es üblicherweise bei »POST« -Requests der Fall ist. Wird »data« mit einem einfachen String-Objekt gefüttert, schickt die »post()« -Methode diesen direkt mit.

Für den Upload von Dateien per »POST« -Request sieht »post()« hingegen den »files« -Parameter vor. Es nimmt ebenfalls ein Dictionary entgegen, in dem die Werte mit geöffneten Dateiobjekten zu befüllen sind. Zum Beispiel:

requests.post(URL, files={'file': open('bild.png')})

Daneben definiert der »headers« -Parameter die HTTP-Header ebenfalls in Form eines Dictionary. Beispielsweise zeigt die Angabe »headers={'content-type': 'image/png'}« an, dass es sich bei mitgeschickten Daten eines »POST« -Requests um eine Bilddatei im PNG-Format handelt.

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019