Comment faire des requêtes HTTP externes avec Node.js [fermé]

84

La question est assez simple. Je souhaite utiliser un serveur Node.js en tant que proxy pour enregistrer, authentifier et transférer les requêtes HTTP vers un serveur HTTP principal (requêtes PUT, GET et DELETE).

Quelle bibliothèque dois-je utiliser à cette fin? J'ai peur de ne pas en trouver un.

Pierre
la source

Réponses:

136

NodeJS prend en charge http.request en tant que module standard: http://nodejs.org/docs/v0.4.11/api/http.html#http.request

var http = require('http');

var options = {
  host: 'example.com',
  port: 80,
  path: '/foo.html'
};

http.get(options, function(resp){
  resp.on('data', function(chunk){
    //do something with chunk
  });
}).on("error", function(e){
  console.log("Got error: " + e.message);
});
chovy
la source
10
Je recommanderais d'ajouter resp.setEncoding('utf8');(ou quel que soit le codage que vous utilisez) pour obtenir des données sous forme de chaînes utf8. Si j'ai bien compris, sinon vous obtiendrez des objets Buffer et vous pourriez avoir des problèmes avec les caractères multi-octets si un caractère multi-octets est divisé en deux morceaux. (Je viens de déboguer un problème connexe pendant un moment)
Touko
8
J'ai en fait commencé à utiliser requestbeaucoup plus le module npm.
chovy
7

Je combinerais node-http-proxy et express .

node-http-proxy prendra en charge un proxy à l'intérieur de votre serveur Web node.js via RoutingProxy(voir l'exemple appelé Proxy requests sur un autre serveur http ).

Dans votre logique de serveur personnalisée, vous pouvez effectuer une authentification à l'aide d'express. Voir l' exemple d'authentification ici pour un exemple .

La combinaison de ces deux exemples devrait vous donner ce que vous voulez.

hross
la source
5

Vous pouvez utiliser le httpmodule intégré pour faire un http.request().

Cependant, si vous souhaitez simplifier l'API, vous pouvez utiliser un module tel que superagent

maléfique
la source
3
API beaucoup plus saine en effet. Je ne blâme pas le nœud de ne fournir qu'une API de bas niveau, mais commencer à gérer des morceaux de données est tout simplement ennuyeux.
Laurent Bourgault-Roy
1

node-http-proxy est une excellente solution, comme suggéré par @hross ci-dessus. Si vous n'êtes pas enclin à utiliser node, nous utilisons NGINX pour faire la même chose. Cela fonctionne très bien avec node. Nous l'utilisons par exemple pour traiter les requêtes SSL avant de les transmettre au node. Il peut également gérer les itinéraires de mise en cache et de transfert. Yay!

Jamund Ferguson
la source
0

Vous pouvez utiliser le module http node.js pour ce faire. Vous pouvez consulter la documentation sur Node.js HTTP .

Vous devrez également transmettre la chaîne de requête à l'autre serveur HTTP. Vous devriez l'avoir dans ServerRequest.url .

Une fois que vous avez ces informations, vous pouvez passer le serveur HTTP backend et le port dans les options que vous fournirez dans le http.request()

momo
la source