Node.js-Module: request

HTTP-Requests mit Node.js
Keine Kommentare

Mit über 18 Millionen Downloads pro Monat ist das request-Paket eines der am häufigsten verwendeten npm-Module im gesamten Repository. Und das aus gutem Grund.

Falls Sie schon einmal versucht haben, über das HTTP-Modul von Node.js selbst einen HTTP Request an einen Webserver zu erzeugen, werden Sie festgestellt haben, dass dies alles andere als lustig ist. Die Schnittstelle ist wenig intuitiv und weit entfernt von komfortabel, und genau deshalb wurde schon vor langer Zeit das request-Paket ins Leben gerufen. Sein einziges Ziel ist es, die Erzeugung von HTTP-Clients unter Node.js zu einem Kinderspiel zu machen.

Dabei kann sich allerdings auch der Funktionsumfang des Moduls sehen lassen: Es deckt alle üblichen Use Cases von einfachen GET Requests bis hin zu Dateiuploads und Authentifizierung ab. Zwei weitere erwähnenswerte Features des request-Pakets sind die Unterstützung verschlüsselter Verbindungen über HTTPS ohne weitere Konfiguration, und die Tatsache, dass das Paket automatisch Weiterleitungen folgt und hier nicht nur die Meldung zurückliefert, dass es sich um eine solche handelt.

Installation und Verwendung

Der Node Package Manager macht die Installation erfahrungsgemäß recht einfach. Mit dem Befehl npm install –save request ist das Modul schon Teil Ihrer Applikation. Aber auch die Verwendung des Moduls gestaltet sich ähnlich unproblematisch.

 
const request = require('request');
request('http://www.google.com', (err, res, body) = > {
  console.log(body);
});

In der einfachsten Variante der Verwendung des Pakets rufen Sie die vom Paket exportierte Funktion einfach mit dem Ziel-URL und einer Callback-Funktion auf. Das request-Paket führt daraufhin eine GET-Anfrage an den angegebenen URL aus; sobald das Ergebnis vorliegt, wird die Callback-Funktion ausgeführt. Das erste Argument ist – dem Node.js-Standard folgend – ein Fehlerobjekt, das im Erfolgsfall den Wert null aufweist. Das zweite Argument stellt eine Objektrepräsentation der Antwort inklusive aller Headerinformationen und des Bodys dar. Das letzte Argument schließlich beinhaltet lediglich den Body der Antwort.

Sollte Ihnen diese Art der Antwortbehandlung entweder nicht liegen oder nicht zu Ihrer Applikation passen, müssen Sie sich keine Sorgen machen. Das request-Paket ist in seiner Verwendung recht flexibel und bietet Ihnen zwei Schnittstellen zur Anbindung, von denen eine der Umgang mit Callbacks ist. Sie können die Antwort des Webservers auch ganz bequem als Stream verarbeiten und diesen einfach weiterpipen:

 
const request = require('request');
const fs = require('fs');

request('http://www.google.com')
  .pipe(fs.createWriteStream('output.html'));

In diesem Beispiel wird eine GET-Anfrage an http://www.google.com gesendet und die Antwort, also der Nachrichten-Body, über einen writable Stream in die Datei output.html geschrieben.

Tools every PHP Developer needs to know

mit Sebastian Bergmann (thePHP.cc)

Learning Machine Learning

mit Joel Lord (Auth0)

Weitere HTTP-Methoden

Natürlich sind Sie bei der Verwendung des request-Pakets nicht nur auf die HTTP-GET-Methode beschränkt. Sie können selbstverständlich auch Anfragen mit POST, PUT und allen weiteren HTTP-Methoden an einen Server senden. Zu diesem Zweck rufen Sie einfach die entsprechende Methode auf dem request-Objekt auf.

 
const request = require('request');

request.head('http://www.google.com', (err, res) => {
  console.log(res);
});

In diesem Codebeispiel erzeugen Sie eine HEAD-Anfrage an Google. Die Behandlung der Antwort erfolgt analog zum ersten Beispiel, außer dass Sie in diesem Fall keinen Nachrichten-Body erhalten.

Formularbehandlung

Ein weiterer, noch dazu recht häufiger Anwendungsfall ist das Versenden von Formularwerten an einen Server, wobei die Formulardaten sowohl URL-encodiert als auch als multipart übermittelt werden können. Für den URL-encodierten Versand stehen Ihnen mehrere Möglichkeiten zur Verfügung. Sie können die Daten entweder mit der form-Methode, einem zusätzlichen Objekt als zweites Argument, oder in einem Konfigurationsobjekt als erstes Argument übergeben. Listing 1 zeigt Ihnen die letzte Variante als Beispiel. In diesem Quellcode wird eine POST-Anfrage an den Server gesendet und die Daten des formData-Objekts werden übermittelt.

 

const request = require('request');

const formData = {
  username: 'Klaus',
  password: 'secret'
};

request.post({
  url: 'http://localhost:8080/upload',
  form: formData
}, (err, res, body) =&gt {
  console.log(res);
});

Wie schon erwähnt, sind Sie nicht nur auf URL-encodierte Formulare beschränkt, auch der Upload von Dateien an einen Server lässt sich mit geringen Anpassungen ohne Probleme vornehmen. Verwenden Sie statt der form die formData-Option in Ihrem Konfigurationsobjekt, können Sie auch Dateien übermitteln. Hierfür geben Sie als Wert statt wie im bisherigen Beispiel einfach einen readable Stream an, und schon wird die entsprechende Datei hochgeladen.

Fazit

Falls Sie in Ihrer Node.js-Applikation in die Rolle eines HTTP-Clients schlüpfen müssen, sollten Sie das request-Paket in Betracht ziehen. Die hier vorgestellten Features sind lediglich ein Ausschnitt aus dem gesamten Funktionsumfang des Pakets. Es deckt also nicht nur die Standard Use Cases ab, sondern auch Themen wie oAuth oder AWS-Signatur.

Ein weiteres Kriterium, das ganz klar für dieses Paket spricht, ist seine Stabilität und Langlebigkeit: Es wird mittlerweile seit mehreren Jahren von mehreren Entwicklern aktiv maintaint, und zahlreiche andere Pakete bauen auf diesem Paket auf. Beides sind sichere Indikatoren, dass auch andere Personen und Unternehmen ein Interesse haben, dass das Paket weiterentwickelt und mit Bugfixes versorgt wird. Insgesamt handelt es sich bei diesem Paket also um eine solide Wahl.

PHP Magazin

Entwickler MagazinDieser Artikel ist im PHP Magazin erschienen. Das PHP Magazin deckt ein breites Spektrum an Themen ab, die für die erfolgreiche Webentwicklung unerlässlich sind.

Natürlich können Sie das PHP Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -