Je travaillais dans un réseau de récolte derrière un serveur proxy. Dans mon code, je peux définir le proxy en utilisant l'approche mentionnée dans ce fil ( Comment puis-je utiliser un proxy http avec node.js http.Client? ).
Mais le problème est que la plupart des modules tiers n'ont pas de paramètre proxy et je ne peux pas modifier leur code pour ajouter le proxy. De plus, mon code peut être utilisé dans un environnement de connexion directe, ce qui signifie que je ne peux pas coder en dur mon paramètre proxy dans le code.
Je sais que NPM a un paramètre global pour le proxy qui est
npm config set proxy http://proxy.company.com:8080[.____..
Mais je n'ai trouvé aucune configuration similaire dans Node.js.
Node.js prend-il en charge les paramètres de proxy globaux pour que je n'ai pas besoin de modifier tous les codes et de les allumer et éteindre facilement.
Malheureusement, il semble que les informations de proxy doivent être définies à chaque appel sur http.request
. Node n'inclut pas de mécanisme pour les paramètres de proxy globaux.
Le global-tunnel-ng
module sur NPM semble gérer cela, cependant:
var globalTunnel = require('global-tunnel-ng');
globalTunnel.initialize({
Host: '10.0.0.10',
port: 8080,
proxyAuth: 'userId:password', // optional authentication
sockets: 50 // optional pool size for each http and https
});
Une fois les paramètres globaux établis avec un appel à initialize
, les deux http.request
et la bibliothèque request
utiliseront les informations du proxy.
Le module peut également utiliser le http_proxy
variable d'environnement:
process.env.http_proxy = 'http://proxy.example.com:3129';
globalTunnel.initialize();
J'ai finalement créé un module pour résoudre cette question (partiellement). Fondamentalement, ce module réécrit http.request
fonction, a ajouté le paramètre proxy puis se déclenche. Consultez mon article de blog: https://web.archive.org/web/20160110023732/http://blog.shaunxu.me:80/archive/2013/09/05/semi-global-proxy-setting -pour-node.js.aspx
Bien qu'il ne s'agisse pas d'un paramètre Nodejs, je vous suggère d'utiliser des chaînes proxy que je trouve plutôt pratiques. Il est probablement disponible dans votre gestionnaire de paquets.
Après avoir défini le proxy dans le fichier de configuration (/etc/proxychains.conf
pour moi), vous pouvez exécuter proxychains npm start
ou proxychains4 npm start
(c'est à dire. proxychains [command_to_proxy_transparently]
) et toutes vos demandes seront automatiquement transmises par proxy.
Paramètres de configuration pour moi:
Ce sont les paramètres minimaux que vous devrez ajouter
## Exclude all localhost connections (dbs and stuff)
localnet 0.0.0.0/0.0.0.0
## Set the proxy type, ip and port here
http 10.4.20.103 8080
(Vous pouvez obtenir l'ip du proxy en utilisant nslookup [proxyurl]
)
remplacez {userid} et {password} par votre identifiant et votre mot de passe dans votre organisation ou connectez-vous à votre machine.
npm config set proxy http://{userid}:{password}@proxyip:8080/
npm config set https-proxy http://{userid}:{password}@proxyip:8080/
npm config set http-proxy http://{userid}:{password}@proxyip:8080/
strict-ssl=false