162 votes

Comment puis-je utiliser un proxy http avec node.js http.Client?

Je veux faire un sortant HTTP appel de node.js, à l'aide de la norme http.Client. Mais je ne peux pas atteindre le serveur à distance directement à partir de mon réseau et que vous devez passer par un proxy.

Comment puis-je dire node.js pour utiliser le proxy?

166voto

Samuel Points 21085

Tim Macfarlane's réponse a été de près en ce qui concerne l'utilisation d'un proxy HTTP.

À l'aide d'un proxy HTTP (pour les non sécurisé demandes) est très simple. Vous connecter au proxy et faire la demande, normalement, sauf que le chemin d'accès inclut la totalité de l'url et de l'en-tête d'hôte est défini à l'hôte que vous souhaitez vous connecter.
Tim était très proche avec sa réponse, mais il a raté le réglage de l'en-tête d'hôte correctement.

var http = require("http");

var options = {
  host: "proxy",
  port: 8080,
  path: "http://www.google.com",
  headers: {
    Host: "www.google.com"
  }
};
http.get(options, function(res) {
  console.log(res);
  res.pipe(process.stdout);
});

Pour l'enregistrement de sa réponse ne fonctionne pas avec le http://nodejs.org/ mais c'est parce que leur serveur ne se soucie pas de l'en-tête d'hôte est incorrect.

70voto

Imskull Points 153

Vous pouvez utiliser le demande, je viens de trouver c'est incroyablement facile à utiliser de proxy sur node.js avec un externe "proxy" paramètre, encore plus, il prend en charge HTTPS via un proxy http.

var request = require('request');
request({'url':'https://anysite.you.want/sub/sub',
        'proxy':'http://yourproxy:8087'}, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
    }
})

39voto

Chris Points 13472

Une chose qui m'a pris un certain temps à comprendre, utiliser 'http' pour accéder au proxy, même si vous essayez de proxy grâce à un serveur https. Cela fonctionne pour moi, à l'aide de Charles (osx analyseur de protocole):

var http = require('http');

http.get ({
    host: '127.0.0.1',
    port: 8888,
    path: 'https://www.google.com/accounts/OAuthGetRequestToken'
}, function (response) {
    console.log (response);
});

16voto

Tim Macfarlane Points 61

@Renat ici déjà mentionné, proxy HTTP trafic est assez normal des requêtes HTTP. En faire la demande à l'encontre de la procuration, en passant l' URL complète de la destination que le chemin d'accès.

var http = require ('http');

http.get ({
    host: 'my.proxy.com',
    port: 8080,
    path: 'http://nodejs.org/'
}, function (response) {
    console.log (response);
});

8voto

Chris Kimpton Points 2916

La 'demande' http paquet semble avoir cette fonctionnalité:

https://github.com/mikeal/request

Par exemple, le 'r' objet de demande ci-dessous utilise localproxy pour accéder à ses demandes:

var r = request.defaults({'proxy':'http://localproxy.com'})

http.createServer(function (req, resp) {
  if (req.url === '/doodle.png') {
    r.get('http://google.com/doodle.png').pipe(resp)
  }
})

Malheureusement, il n'existe pas de "global" par défaut de sorte que les utilisateurs des bibliothèques qui utilisent ce ne peut pas modifier le proxy à moins que la lib passer à travers les options du protocole http...

HTH, Chris

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X