web-dev-qa-db-fra.com

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

J'essaie de courir npm derrière un proxy. J'ai essayé à la fois d'entrer dans le proxy directement ou via Authoxy:

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

Quel que soit le proxy que j'utilise, je finis toujours avec la même erreur lors de l'exécution de npm search:

npm info it worked if it ends with ok
npm verb cli [ 'node', '/usr/local/bin/npm', 'search' ]
npm info using [email protected]
npm info using [email protected]
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 informations d'identification de proxy réelles pour notre proxy NTLM sous la forme http: // utilisateur: pass @ proxy: port.

Comment puis-je faire ce travail à travers le proxy?

Mettre à jour

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

56
nwinkler

OK, alors quelques minutes après avoir posé 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. Changer l'URL du registre de HTTPS à HTTP l'a corrigé 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.

Semble être un problème commun, mais pas bien documenté. J'espère que cette réponse facilitera la tâche des gens s'ils rencontrent ce problème.

115
nwinkler
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080

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

28
tedyyu

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

npm config set proxy http://usr:pwd@Host:port
npm config set https-proxy http://usr:pwd@Host:port
12
Olivier C

Si quelqu'un d'autre finit par casser ses paramètres de configuration proxy, allez dans votre . Npmrc, pour saisir ces paramètres. Ce fichier se trouve 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/
5
atlMapper

Pour ceux qui utilisent Jenkins ou un autre serveur CI: c’est important vous définissez vos serveurs proxy, en particulier s’ils diffèrent de ceux de votre environnement de développement local et de l’environnement CI. Dans ce cas:

  • ne définissez pas les mandataires dans le fichier .npmrc du projet. Sinon, veillez à remplacer les paramètres sur le serveur CI.
  • tout autre paramètre proxy pourrait causer 403 Forbidden avec un petit indice sur le fait que vous utilisez le mauvais proxy. Vérifier votre gradle.properties ou tel et corrige/substitue si nécessaire.

TLDR: définissez les mandataires non dans le projet mais sur la machine sur laquelle vous travaillez.

1
Marc.S