Je souhaite passer un appel HTTP sortant à partir de node.js, en utilisant le standard http.Client
. Mais je ne peux pas accéder au serveur distant directement depuis mon réseau et je dois passer par un proxy.
Comment dire à node.js d'utiliser le proxy?
Réponses:
La réponse de Tim Macfarlane était proche en ce qui concerne l'utilisation d'un proxy HTTP.
L'utilisation d'un proxy HTTP (pour les requêtes non sécurisées) est très simple. Vous vous connectez au proxy et effectuez la demande normalement, sauf que la partie chemin comprend l'URL complète et que l'en-tête d'hôte est défini sur l'hôte auquel vous souhaitez vous connecter.
Tim était très proche de sa réponse mais il a manqué de régler correctement l'en-tête de l'hôte.
Pour mémoire, sa réponse fonctionne avec http://nodejs.org/ mais c'est parce que leur serveur ne se soucie pas que l'en-tête d'hôte est incorrect.
la source
404
, et le serveur de destination ne reçoit jamais la demande ..Vous pouvez utiliser request , je viens de trouver qu'il est incroyablement facile d'utiliser un proxy sur node.js, juste avec un paramètre externe "proxy", encore plus il prend en charge HTTPS via un proxy http.
la source
http
ethttps
dans mon cas, merci beaucoupUne chose qui m'a pris un certain temps à comprendre, utilisez 'http' pour accéder au proxy, même si vous essayez de passer par proxy via un serveur https. Cela fonctionne pour moi en utilisant Charles (analyseur de protocole osx):
la source
Comme @Renat l'a déjà mentionné, le trafic HTTP proxy est fourni dans des requêtes HTTP assez normales. Faites la demande auprès du proxy, en passant l' URL complète de la destination comme chemin.
la source
Je pensais ajouter ce module que j'ai trouvé: https://www.npmjs.org/package/global-tunnel , qui a très bien fonctionné pour moi (a travaillé immédiatement avec tout mon code et des modules tiers avec uniquement le code ci-dessous).
Faites-le une fois, et tous les http (et https) de votre application passent par le proxy.
Alternativement, appeler
Utilisera la
http_proxy
variable d'environnementla source
J'ai acheté un serveur proxy privé, après l'achat j'ai obtenu:
Et je voulais l'utiliser. La première réponse et la deuxième réponse ne fonctionnaient que pour http (proxy) -> http (destination), mais je voulais http (proxy) -> https (destination).
Et pour la destination https, il serait préférable d'utiliser directement le tunnel HTTP . J'ai trouvé une solution ici . Code final:
la source
Le package http 'request' semble avoir cette fonctionnalité:
https://github.com/mikeal/request
Par exemple, l'objet de requête 'r' ci-dessous utilise localproxy pour accéder à ses requêtes:
Malheureusement, il n'y a pas de valeurs par défaut "globales", de sorte que les utilisateurs de bibliothèques qui utilisent cela ne peuvent pas modifier le proxy à moins que la bibliothèque ne passe par les options http ...
HTH, Chris
la source
En gros, vous n'avez pas besoin d'un support proxy explicite. Le protocole proxy est assez simple et basé sur le protocole HTTP normal. Il vous suffit d'utiliser votre hôte proxy et votre port lors de la connexion avec HTTPClient. Exemple (à partir de la documentation node.js):
Donc, fondamentalement, vous vous connectez à votre proxy, mais faites une demande à "http://www.google.com".
la source
Si vous avez besoin de l'autorisation de base pour votre fournisseur de proxy, utilisez simplement ce qui suit:
la source
Node doit prendre en charge l'utilisation de la variable d'environnement http_proxy - c'est donc multiplateforme et fonctionne sur les paramètres du système plutôt que d'exiger une configuration par application.
En utilisant les solutions fournies, je recommanderais ce qui suit:
Coffeescript
Javascript
Utilisation Pour utiliser la méthode, remplacez simplement http.get, par exemple, ce qui suit écrit la page d'index de google dans un fichier appelé test.htm:
la source
La réponse d'Imskull a presque fonctionné pour moi, mais j'ai dû faire quelques changements. Le seul vrai changement est l'ajout d'un nom d'utilisateur, d'un mot de passe et de la définition de rejectUnauthorized sur false. Je ne pourrais pas faire de commentaire alors j'ai mis cela dans une réponse.
Si vous exécutez le code, vous obtiendrez les titres des histoires actuelles sur Hacker News, selon ce tutoriel: http://smalljs.org/package-managers/npm/
la source
Je pense qu'il existe une meilleure alternative aux réponses à partir de 2019. Nous pouvons utiliser le
global-tunnel-ng
package pour initialiser le proxy et ne pas polluer le codehttp
ouhttps
basé partout. Alors installez d'abord leglobal-tunnel-ng
package:Modifiez ensuite vos implémentations pour initialiser le proxy si nécessaire comme:
la source
Ce n'est peut-être pas exactement le one-liner que vous espériez, mais vous pouvez jeter un œil à http://github.com/nodejitsu/node-http-proxy car cela peut vous éclairer sur la façon dont vous pouvez utiliser votre application avec http. Client.
la source
http://groups.google.com/group/nodejs/browse_thread/thread/d5aadbcaa00c3f7/12ebf01d7ec415c3?lnk=gst&q=proxy#12ebf01d7ec415c3
Sur la base des réponses de ce fil, il semblerait que vous puissiez utiliser des chaînes de proxy pour exécuter node.js via le serveur proxy:
$ proxychains /path/to/node application.js
Personnellement, je n'ai pas pu installer l'une des versions de la chaîne proxy sur l' environnement Cygwin / Windows et je n'ai donc pas pu le tester.
De plus, ils ont également parlé de l'utilisation de connect-proxy mais je n'ai trouvé aucune documentation sur la façon de procéder.
En bref, je suis toujours bloqué, mais peut-être que quelqu'un peut utiliser cette information pour trouver une solution de rechange appropriée.
la source
Pour utiliser un proxy avec https, j'ai essayé les conseils sur ce site Web (en utilisant la dépendance https-proxy-agent ) et cela a fonctionné pour moi:
http://codingmiles.com/node-js-making-https-request-via-proxy/
la source
utilisez 'https-proxy-agent' comme ceci
la source
Si vous disposez du schéma d'authentification HTTP de base , vous devez créer une chaîne base64 de
myuser:mypassword
, puis ajouter «Basic» au début. C'est la valeur de l'en - tête Proxy-Authorization , voici un exemple:Dans nodejs, vous pouvez utiliser Buffer pour encoder
À titre d'exemple, dans les navigateurs, vous pouvez encoder en base64 en utilisant btoa () , utile dans les requêtes ajax dans un navigateur sans paramètres de proxy effectuant une requête en utilisant un proxy.
Comment trouver quel schéma accepte le serveur proxy?
Si nous n'avons pas de DNS personnalisé configuré (qui lèverait quelque chose comme ERR_NAME_NOT_RESOLVED), lorsque nous effectuons une requête, la réponse (code 407) doit indiquer dans les en-têtes de réponse le schéma d'authentification http utilisé par le proxy.
la source