http - tienes - npm detrás de un proxy falla con el estado 403
node express debug (5)
De acuerdo, así que minutos después de publicar la pregunta, encontré la respuesta yo mismo aquí: https://github.com/isaacs/npm/issues/2119#issuecomment-5321857
El problema parece ser que npm no es tan bueno con HTTPS sobre un proxy. Cambiando la URL del registro de HTTPS a HTTP se corrigió por mí:
npm config set registry http://registry.npmjs.org/
Todavía tengo que proporcionar la configuración del proxy (a través de Authoxy en mi caso), pero todo funciona bien ahora.
Parece ser un problema común, pero no está bien documentado. Espero que esta respuesta aquí haga que sea más fácil para las personas encontrar si se topan con este problema.
Estoy tratando de ejecutar npm detrás de un proxy. Intenté ingresar el proxy directamente o a través de Authoxy :
npm config set proxy http://localhost:8999
npm config set https-proxy http://localhost:8999
Independientemente de qué proxy use, siempre termino con el mismo error al ejecutar la 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)
El comando siempre falla con sutatusCode
[sic!] 403 - lo que significa que no está autorizado. He configurado Authoxy para que no requiera un nombre de usuario / contraseña. El mismo error ocurre cuando omito Authoxy y proporciono las credenciales de proxy real para nuestro proxy NTLM en la forma de http: // usuario: pase @ proxy: puerto.
¿Cómo puedo hacer que esto funcione a través del proxy?
Actualizar
Creé un problema en el proyecto de NPM para informar esto: https://github.com/isaacs/npm/issues/2866
Para aquellos que usan Jenkins u otro servidor de CI: es importante que defina sus proxies, especialmente cuando son diferentes en su entorno de desarrollo local y en el entorno de CI. En este caso:
- no defina los proxies en el archivo .npmrc del proyecto. O si lo hace, asegúrese de anular la configuración en el servidor de CI.
- cualquier otra configuración proxy puede causar
403 Forbidden
con poca pista sobre el hecho de que está utilizando el proxy incorrecto. Verifique susgradle.properties
ogradle.properties
similares y corrija / invalide según sea necesario.
TLDR: defina los proxies que no están en el proyecto sino en la máquina en la que está trabajando.
Si alguien más termina rompiendo sus configuraciones de configuración de proxy, vaya a su .npmrc , para escribir las configuraciones. Este archivo se encuentra en el nivel de la carpeta raíz de su nodo.
Aquí está cuál es mi archivo corregido:
#proxy = http://proxy.company.com:8080
https-proxy = https://proxy.company.com:8080
registry = http://registry.npmjs.org/
Si necesita proporcionar un nombre de usuario y una contraseña para autenticarse en su proxy, esta es la sintaxis que debe usar:
npm config set proxy http://usr:pwd@host:port
npm config set https-proxy http://usr:pwd@host:port
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
el crédito va a http://jjasonclark.com/how-to-setup-node-behind-web-proxy .