要扩展@Steve Roberts的答案。
我的用户名格式为“域\用户名”-代理配置中的斜杠导致出现正斜杠。因此输入:
npm config set proxy "http://domain\username:password@servername:port/"
我还必须对domain\user
字符串进行URL编码,但是,我的用户名中有一个空格,因此我输入了a +
来对空间URL编码进行编码,但是它将被双重编码为%2B
(这是加号的URL编码,但是URL空格的编码是%20
),因此我不得不执行以下操作:
npm命令
// option one
// it works for some packages
npm config set http_proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser+name:password@x.x.x.x:port"
// option two
// it works best for me
// please notice that I actually used a space
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"
npm config set proxy "http://DOMAIN%5Cuser name:password@x.x.x.x:port"
// option two (B) as of 2019-06-01
// no DOMAIN
// instead of URL encode it with '+', '%20 ' OR %2B (plus url encoded)
npm config set http_proxy "http://user name:password@x.x.x.x:port"
npm config set proxy "http://user name:password@x.x.x.x:port"
对npm config进行故障排除
我使用npm config list
来获取我在上面设置的解析值,这就是我发现双重编码的方式。奇怪的。
本质上,您必须确定以下要求:
- 是
DOMAIN
验证所需的字符串
- 您需要编码特殊字符吗?
问候。
WINDOWS环境变量(CMD提示)
更新资料
事实证明,即使使用上述配置,我在内部仍使用Request-Simplified HTTP Client来下载内容的某些程序包/脚本仍然存在一些问题。因此,如以上自述文件所述,我们可以指定环境变量以在命令行上设置代理,而Request将接受这些值。
然后,在(并且我不愿意承认)几次尝试(更像是几天)之后,尝试设置环境变量,我终于成功遵循了以下准则:
rem notice that the value after the = has no quotations
rem - I believe that if quotations are placed after it, they become
rem part of the value, you do not want that
rem notice that there is no space before or after the = sign
rem - if you leave a space before it, you will be declaring a variable
rem name that includes such space, you do not want to do that
rem - if you leave a space after it, you will be including the space
rem as part of the value, you do not want that either
rem looks like there is no need to URL encode stuff in there
SET HTTP_PROXY=http://DOMAIN\user name:password@x.x.x.x:port
SET HTTPS_PROXY=http://DOMAIN\user name:password@x.x.x.x:port
中央电视台
我使用上述技术达数周之久,直到意识到在需要代理设置的所有工具中更新密码的开销。
除了npm之外,我还使用:
- 凉亭
- 流浪汉
- 虚拟盒(运行linux)
- apt-get [Linux]
- 吉特
- vscode
- 括号
- 原子
- tsd
cntlm设置步骤
因此,我安装了cntlm。设置cntlm
非常正确,您需要查找ini文件@C:\Program Files\Cntlm\cntlm.ini
- 打开
C:\Program Files\Cntlm\cntlm.ini
(您可能需要管理员权限)
- 查找
Username
和Domain
行(我认为第8-9行)
在cmd提示符下运行:
cd C:\Program Files\Cntlm\
cntlm -M
cntlm -H
cygwin warning:
MS-DOS style path detected: C:\Program Files\Cntlm\cntlm.ini
Preferred POSIX equivalent is: /Cntlm/cntlm.ini
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Password:
您从中获得的输出cntlm -H
将类似于:
PassLM 561DF6AF15D5A5ADG
PassNT A1D651A5F15DFA5AD
PassNTLMv2 A1D65F1A65D1ASD51 # Only for user 'user name', domain 'DOMAIN'
- 建议您使用PassNTLMv2,因此请添加
#
前一行PassLM
,PassNT
或者不要使用它们
- 粘贴
cntlm -H
ini文件中的输出,替换PassLM
,PassNT
和的行PassNTMLv2
,或者注释原始行并添加您的行。
- 添加您的
Proxy
服务器。如果您不知道什么是代理服务器,请执行以下操作,我通过在AutoConfigURL
注册表中查找注册表项来查找代理自动配置文件HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
。导航到该URL,并浏览恰巧是JavaScript的代码。
- (可选)您可以通过更改以下内容来更改cntlm侦听的端口:
Listen ####
线路####
的端口,其中端口号为。
使用Cntlm设置NPM
因此,您将npm指向您的cntml代理,您可以使用ip(我使用过的)localhost
和cntlm的默认端口,3128
因此我的代理url看起来像这样
http://localhost:3128
使用正确的命令:
npm config设置代理http:// localhost:3128
简单得多。您使用相同的URL设置所有工具,并且只在一个地方更新密码。生活没有那么简单。
必须设置npm CA证书
从NPM文档CA
如果您的公司代理使用自己的自签名证书拦截https连接,则必须避免 npm config set strict-ssl false
(大不行)。
基本步骤
- 从浏览器获取证书(Chrome可以正常运行)。将其导出为Base-64编码的X.509(.CER)
- 用替换新行
\n
- 编辑您的
.npmrc
添加行ca[]="-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----"
问题
我注意到有时npm会挂起,所以我停止(有时是强制性的)cntlm并重新启动它。