web-dev-qa-db-fra.com

Un proxy (comme un violoneux) peut-il être utilisé avec ClientRequest de Node.js

Est-ce que node.js peut être configuré pour reconnaître un proxy (comme Fiddler par exemple) et acheminer tous les ClientRequest via le proxy?

J'utilise node sur Windows et je voudrais déboguer les requêtes http comme j'utiliserais Fiddler pour JavaScript dans le navigateur.

Soyons clairs, je n'essaie pas de créer un proxy ni de requêtes proxy reçues par un serveur. Je souhaite acheminer les demandes effectuées par http.request() via un proxy. Je voudrais utiliser Fiddler pour inspecter à la fois la demande et la réponse comme je le ferais si j'exécutais la demande dans un navigateur.

46
chuckj

Pour acheminer vos demandes client via fiddler, modifiez votre objet options comme ceci (ex.: Juste avant de créer http.request):

options.path = 'http://' + options.Host + ':' + options.port + options.path;
options.headers.Host = options.Host;
options.Host = '127.0.0.1';
options.port = 8888;

myReq = http.request(options, function (result) {
    ...
});
24
Peter Cools

Je trouve que ce qui suit est astucieux. Le module request lit les informations de proxy à partir de la variable d'environnement Windows.

La saisie de ce qui suit dans l'invite de commande windows le définira pour la durée de vie du shell. Il vous suffit d'exécuter votre application de nœud à partir de ce shell.

set https_proxy=http://127.0.0.1:8888 
set http_proxy=http://127.0.0.1:8888
set NODE_TLS_REJECT_UNAUTHORIZED=0
53
Naraen

Si vous voulez monter les requêtes sortantes du nœud, vous pouvez utiliser le module request

et définissez simplement la propriété proxy dans les options, comme ça

request.post('http://204.145.74.56:3003/test', {
headers :{ 'content-type' : 'application/octet-stream'}, 
'body' : buf ,
 proxy: 'http://127.0.0.1:8888'
}, function() {
   //callback
});

8888 est le port par défaut du violoneux.

7
doron aviguy

Répondre à ma propre question: selon https://github.com/joyent/node/issues/1514 la réponse est non , mais vous pouvez utiliser le module request, http://search.npmjs.org/#/request , qui prend en charge les proxys.

5
chuckj
process.env.https_proxy = "http://127.0.0.1:8888";
process.env.http_proxy = "http://127.0.0.1:8888";
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
4
Warlock

Si vous souhaitez configurer un proxy dans le cas général, les autres réponses sont correctes: vous devez configurer manuellement cela pour la bibliothèque que vous utilisez en tant que nœud intentionnellement ignore les paramètres de votre proxy système hors de la boîte .

Si toutefois vous cherchez simplement un outil de débogage HTTP de type violon pour Node.js, je travaille sur un projet open source pour le faire depuis un petit moment (avec prise en charge intégrée des nœuds) appelé Boîte à outils HTTP. Cela vous permet

  • Ouvrez un terminal depuis l'application en un clic
  • Démarrez n'importe quel nœud CLI/serveur/script à partir de ce terminal
  • Toutes les requêtes HTTP ou HTTPS qu'il envoie sont envoyées automatiquement par proxy, vous pouvez donc tout voir et réécrire. Aucun changement de code ou package npm nécessaire.

Voici une démonstration de celui-ci déboguant un tas de trafic NPM, nœud et navigateur:

Demo screenshot

En interne, la façon dont cela fonctionne est d'injecter un extra script JS dans les processus démarrés Node, qui se connecte à require() pour reconfigurer automatiquement les paramètres du proxy pour vous, pour chaque module qui n'utilise pas les paramètres globaux.

0
Tim Perry