代理后面的npm失败,状态为403

nwi*_*ler 57 proxy http node.js npm

我正试图在代理后面运行npm.我已尝试直接或通过Authoxy输入代理:

npm config set proxy http://localhost:8999
npm config set https-proxy http://localhost:8999
Run Code Online (Sandbox Code Playgroud)

无论我使用哪种代理,运行时总是会遇到同样的错误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)
Run Code Online (Sandbox Code Playgroud)

该命令始终以sutatusCode[sic!] 403失败- 这意味着未经授权.我已将Authoxy设置为不需要用户名/密码.当我绕过Authoxy并以http:// user:pass @ proxy:port的形式为我们的NTLM代理提供真正的代理凭证时,会发生同样的错误.

如何通过代理完成此工作?

更新

我在NPM项目中创建了一个问题报告:https://github.com/isaacs/npm/issues/2866

nwi*_*ler 119

好的,所以在发布问题后的几分钟内,我在这里找到了答案:https: //github.com/isaacs/npm/issues/2119#issuecomment-5321857

问题似乎是npm在代理上使用HTTPS并不是那么好.将注册表URL从HTTPS更改为HTTP为我修复了它:

npm config set registry http://registry.npmjs.org/
Run Code Online (Sandbox Code Playgroud)

我仍然需要提供代理配置(在我的情况下通过Authoxy),但现在一切正常.

似乎是一个常见问题,但没有详细记录.我希望这里的答案能让人们更容易找到他们是否遇到这个问题.

  • 凹凸.这需要进入npm文档. (3认同)
  • 谢谢你的回答,但我有这个错误:"错误:协议无效" (2认同)
  • 同样的问题,我得到了与ricardogobbo相同的错误. (2认同)
  • 为我使用了这个答案以及@tedyyu代理答案(在我撰写本文时)。 (2认同)

ted*_*yyu 28

npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
Run Code Online (Sandbox Code Playgroud)

归功于http://jjasonclark.com/how-to-setup-node-behind-web-proxy.

  • 正如您可能已经看到的,这是我做的第一个更改 - 请参阅我的问题中的前几行.它对我不起作用,可能是由于我们在这里运行的那种代理.我不得不另外更改注册表地址以使用HTTP而不是HTTPS(请参阅我的回答). (6认同)

小智 12

如果您需要提供用户名和密码以在您的代理进行身份验证,则使用以下语法:

npm config set proxy http://usr:pwd@host:port
npm config set https-proxy http://usr:pwd@host:port
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是以明文存储密码,这是一个可怕的想法.我不确定它是否也通过http以明文传输? (4认同)

atl*_*per 5

如果其他人最终破坏他们的代理配置设置,请转到.npmrc,输入设置.此文件位于节点根文件夹级别.

这是我的更正文件是什么样的:

#proxy = http://proxy.company.com:8080
https-proxy = https://proxy.company.com:8080 
registry = http://registry.npmjs.org/
Run Code Online (Sandbox Code Playgroud)