74 votes

npm derrière un proxy échoue avec le statut 403

J'essaie d'exécuter npm derrière un proxy. J'ai essayé d'entrer dans le proxy directement ou par l'intermédiaire de Authoxy :

npm config set proxy http://localhost:8999
npm config set https-proxy http://localhost:8999

Quel que soit le proxy que j'utilise, j'obtiens toujours la même erreur lorsque je lance l'application npm search :

npm info it worked if it ends with ok
npm verb cli [ 'node', '/usr/local/bin/npm', 'search' ]
npm info using npm@1.1.45
npm info using node@v0.8.4
npm verb config file /Users/xxx/.npmrc
npm verb config file /usr/local/etc/npmrc
npm verb config file /usr/local/lib/node_modules/npm/npmrc
npm WARN Building the local index for the first time, please be patient
npm verb url raw /-/all
npm verb url resolving [ 'https://registry.npmjs.org/', './-/all' ]
npm verb url resolved https://registry.npmjs.org/-/all
npm info retry registry request attempt 1 at 09:48:47
npm http GET https://registry.npmjs.org/-/all
npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, sutatusCode=403
npm info retry registry request attempt 2 at 09:48:57
npm http GET https://registry.npmjs.org/-/all
npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, sutatusCode=403
npm info retry registry request attempt 3 at 09:49:57
npm http GET https://registry.npmjs.org/-/all
npm ERR! Error: tunneling socket could not be established, sutatusCode=403
npm ERR!     at ClientRequest.onConnect (/usr/local/lib/node_modules/npm/node_modules/request/tunnel.js:148:19)
npm ERR!     at ClientRequest.g (events.js:185:14)
npm ERR!     at ClientRequest.EventEmitter.emit (events.js:115:20)
npm ERR!     at Socket.socketOnData (http.js:1383:11)
npm ERR!     at TCP.onread (net.js:410:27)

La commande échoue toujours avec sutatusCode [sic !] 403 - ce qui signifie non autorisé. J'ai configuré Authoxy pour qu'il ne nécessite pas de nom d'utilisateur/mot de passe. La même erreur se produit lorsque je contourne Authoxy et que je fournis les véritables informations d'identification de notre proxy NTLM sous la forme http:// user:pass@proxy:port.

Comment puis-je faire en sorte que cela fonctionne par le biais du proxy ?

Mise à jour

J'ai créé un problème sur le projet NPM pour signaler ce problème : https://github.com/isaacs/npm/issues/2866

0 votes

Essayez npm config set strict-ssl false

149voto

nwinkler Points 5889

OK, quelques minutes après avoir posté la question, j'ai trouvé la réponse moi-même ici : https://github.com/npm/npm/issues/2119#issuecomment-5321857

Le problème semble être que npm n'est pas très bon avec HTTPS sur un proxy. La modification de l'URL du registre de HTTPS à HTTP a réglé le problème pour moi :

npm config set registry http://registry.npmjs.org/

Je dois encore fournir la configuration du proxy (via Authoxy dans mon cas), mais tout fonctionne bien maintenant.

Il semble que ce problème soit courant, mais qu'il ne soit pas bien documenté. J'espère que cette réponse facilitera la recherche des personnes qui rencontrent ce problème.

2 votes

Merci pour cette réponse, mais j'ai cette erreur : "Erreur : Invalid protocol"

2 votes

Cela a fonctionné pour moi en utilisant cette réponse ainsi que la réponse du proxy @tedyyu (ci-dessous au moment où j'écris ces lignes).

0 votes

Je tiens à préciser que si vous utilisez 'sudo' avec la commande 'npm', vous devrez également utiliser 'sudo' pour les commandes 'config set'. Cela m'a pris un peu de temps pour le comprendre, mais cela semble évident maintenant.

31voto

tedyyu Points 157
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080

le crédit revient à http://jjasonclark.com/how-to-setup-node-behind-web-proxy .

7 votes

Comme vous avez pu le constater, c'est la première modification que j'ai apportée - voir les deux premières lignes de ma question. Cela n'a pas fonctionné pour moi, probablement en raison du type de proxy que nous utilisons ici. J'ai dû modifier en plus l'adresse du registre pour utiliser HTTP au lieu de HTTPS (voir ma réponse).

0 votes

A parfaitement fonctionné pour moi sur une boîte Windows 7 sur mon réseau d'entreprise.

0 votes

Comme par défaut : npm config set https-proxy registry.npmjs.org npm config set proxy registry.npmjs.org

12voto

Olivier C Points 426

Si vous devez fournir un nom d'utilisateur et un mot de passe pour vous authentifier auprès de votre proxy, c'est la syntaxe à utiliser :

npm config set proxy http://usr:pwd@host:port
npm config set https-proxy http://usr:pwd@host:port

4 votes

Cela semble stocker le mot de passe en clair, ce qui est une idée terrible. Je ne suis pas sûr qu'il soit également transmis en clair via http ?

8voto

atlMapper Points 168

Si quelqu'un d'autre se retrouve à casser les paramètres de configuration de son proxy, allez à votre .npmrc pour saisir les paramètres. Ce fichier est situé au niveau du dossier racine de votre nœud.

Voici à quoi ressemble mon fichier corrigé :

#proxy = http://proxy.company.com:8080
https-proxy = https://proxy.company.com:8080 
registry = http://registry.npmjs.org/

3voto

Ali Abbas Points 673

Dans mon cas, je lis le registre que npm utilise :

 npm config get registry

et j'ai eu

http://registry.npmjs.org/

alors je venais de changer http a https comme ça :

npm config set registry https://registry.npmjs.org/

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