在企业代理.pac后面使用npm

我需要通过npm下载几个包,但我们的公司代理configuration是一个.pac文件(我在Windows上)

我已经尝试过了

npm config set proxy http://mydomain\username:password@1.2.3.4:8181/proxy.pac npm config set https-proxy http://mydomain\username:password@1.2.3.4:8181/proxy.pac 

要么

 npm config set proxy http://1.2.3.4:8181/proxy.pac npm config set https-proxy http://1.2.3.4:8181/proxy.pac 

但它不起作用…

有什么build议? 谢谢

我刚刚有一个非常类似的问题,我不能让npm工作在我们的代理服务器后面。

我的用户名格式为“域\用户名” – 包括代理configuration中的斜杠导致出现正斜杠。 所以input这个:

 npm config set proxy "http://domain\username:password@servername:port/" 

然后运行这个npm config get proxy返回: http:// domain / username:password @ servername:port /

因此,要解决这个问题,我改为URL编码的反斜杠,所以input这个:

 npm config set proxy "http://domain%5Cusername:password@servername:port/" 

与此代理访问是固定的。

在Internet Explorer局域网设置中查找pac文件的url,并从configuration的URL下载pac文件。 pac文件只是一个名为FindProxyForURL的函数,它在不同的场景下返回不同的代理主机。

尝试find您认为适用于一般networkingstream量的pac文件中的主机,并将其插入到C:\Users\<username>\.npmrc

 proxy=http://<username>:<pass>@proxyhost:<port> https-proxy=http://<uname>:<pass>@proxyhost:<port> 

即使您可以在您的公司计算机上使用您的域名和用户名login, 但代理服务器不需要用户活动目录域名 ,只有用户名和密码(可能与您的Active Directorylogin名不同)

不要逃避摆脱特殊的密码字符。

我这样解决了这个问题:

1)我运行这个命令:

npm config set strict-ssl false

2)然后设置npm使用http运行,而不是https:

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

3)然后安装你的包

npm install <package name>

下载你的.pac文件。 在任何编辑器中打开它,找PROXY = "PROXY XXXX:80;你可能有很多代理,复制其中的任何一个,然后运行下面的terminal命令:

 npm config set proxy http://XXXX:80 npm config set https-proxy http://XXXX:80 

现在你应该可以安装任何软件包了!

扩展@Steve Roberts的答案。

我的用户名格式为“域\用户名” – 包括代理configuration中的斜杠导致出现正斜杠。 所以input这个:

 npm config set proxy "http://domain\username:password@servername:port/" 

我也不得不URL编码我的domain\userstring,但是,我有一个空间里面我的用户名,所以我把+编码的空间URL编码,但它会得到双重编码为%2B (这是加号,但是空格的URL编码是%20 ),所以我不得不做以下操作:

npm命令

 //option one //it works for some packages npm config set http_proxy "http://DOMAIN%5Cuser+name:password@xxxx:port" npm config set proxy "http://DOMAIN%5Cuser+name:password@xxxx: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@xxxx:port" npm config set proxy "http://DOMAIN%5Cuser name:password@xxxx:port" 

排除故障npmconfiguration

我使用npm config list来获得我上面设置的parsing值,这就是我如何find双重编码。 奇怪的。

问候。

WINDOWS环境variables(CMD提示符)

更新

原来,即使有上述configuration,我仍然有一些使用Request – Simplified HTTP客户端在内部下载东西的软件包/脚本的问题。 因此,正如上面的自述文件所解释的那样,我们可以指定环境variables来在命令行上设置代理,Request将会尊重这些值。

然后,在试图设置环境variables的几次尝试之后(而且我不愿意承认这个) ,我最终成功地遵循了以下原则:

 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@xxxx:port SET HTTPS_PROXY=http://DOMAIN\user name:password@xxxx:port 

cntlm

我使用了上述技术几个星期,直到我意识到所有需要代理设置的工具更新我的密码的开销。

除了npm,我还使用:

  • 亭子
  • stream浪汉
    • 虚拟框(运行linux)
    • apt-get [linux]
  • 混帐
  • vscode
  • 括号
  • primefaces
  • TSD

cntlm设置步骤

所以,我安装了cntlm 。 设置cntlm是非常重要的,您可以查找ini文件@ C:\Program Files\Cntlm\cntlm.ini

  1. 打开C:\Program Files\Cntlm\cntlm.ini (您可能需要pipe理员权限)
  2. 寻找UsernameDomain (第8-9行,我认为)
    • 添加您的用户名
    • 添加您的域名
  3. 在cmd提示符下运行:

     cd C:\Program Files\Cntlm\ cntlm -M cntlm -H 
    • 你将被要求input密码:
      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: 
  4. 你从cntlm -H得到的输出将如下所示:

     PassLM 561DF6AF15D5A5ADG PassNT A1D651A5F15DFA5AD PassNTLMv2 A1D65F1A65D1ASD51 # Only for user 'user name', domain 'DOMAIN' 
    • build议您使用PassNTLMv2,在PassLMPassNT之前添加#或者不要使用它们
  5. cntlm -H的输出粘贴到ini文件中,replacePassLMPassNTPassNTMLv2 ,或者注释原始行并添加你的行。
  6. 添加您的Proxy服务器。 如果您不知道代理服务器是什么…做我所做的,通过在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings查找AutoConfigURLregistry项来查找我的代理自动configuration文件。 导航到该url,并查看恰好是JavaScript的代码。
  7. 可选地,您可以通过更改Listen ####行来更改cntlm侦听的端口,其中####是端口号。

用cntlm安装NPM

所以,你指向NPM到你的cntml代理,你可以使用IP,我用localhost和默认端口为cntlm 3128所以我的代理url看起来像这样

http://localhost:3128

简单得多。 您使用相同的url设置所有工具,并且只更新一个地方的密码。 生活是非常简单的不是。

问题

我已经注意到有时npmtypes的挂起,所以我停止(有时强制)cntlm并重新启动。

我遇到了几个问题,最后我做了如下:

  1. 使用的提琴手,select“自动validation”
  2. 在小提琴手自定义规则,我补充说

     if (m_AutoAuth) {oSession["X-AutoAuth"] = "domain\\username:password";} 
  3. 最后在npm我设置代理http:// localhost:8888

这工作得很好。

如果NPM给出authentication错误,您可以检查Fiddler。 它很容易安装和configuration。 将Fiddler规则设置为自动validation。在.npmrc中设置这些属性

 registry=http://registry.npmjs.org proxy=http://127.0.0.1:8888 https-proxy=http://127.0.0.1:8888 http-proxy=http://127.0.0.1:8888 strict-ssl=false 

它为我工作:)

您将从您的服务器pipe理员或支持获得代理主机和端口。

之后build立

 npm config set http_proxy http://username:password@proxyofmycomp.com:itsport npm config set proxy http://username:password@proxyofmycomp.com:itsport 

如果密码中有任何特殊字符,请尝试使用%urlencode。 例如: – 英镑(哈希)shuold被%23取代。

这对我工作…

如果你在一个带有代理的企业networking后面,我只是使用了一个ntlm代理工具,并且使用了ntlm提供的端口和代理,

 strict-ssl=false proxy=http://localhost:3125 

我希望这有帮助。

在cmd或Git Bash或其他提示下使用下面的命令

 $ npm config set proxy "http://192.168.1.101:4128" $ npm config set https-proxy "http://192.168.1.101:4128" 

其中192.168.1.101是代理IP,4128是端口。 根据您的代理设置进行更改。

你必须使用“npm config set http-proxy

使用:

 npm config set http-proxy http://1.2.3.4:8181 npm config set https-proxy http://1.2.3.4:8181 

对于在企业防火墙后面挣扎的任何人,以及SSL(无法获得本地发行者证书)的问题,可以尝试以下步骤:

忘了SSL

如果您不关心SSL,那么您可以通过设置代理并将registry更改为非安全版本来遵循许多以前的贡献者的build议:

 npm config set proxy http://username:password@proxyname:port npm config set https-proxy http://username:password@proxyname:port npm config set registry http://registry.npmjs.org/ 

这里有一个快速的“gotcha”,我的代理证书对于安全和非安全的请求是相同的(请注意我是如何将协议作为http://用于https-proxyconfiguration的)。 这可能对你来说是一样的,也可能不一样。

我想保持SSL

如果你想保持SSL,而不想使用strict-ssl=false ,那么你有更多的工作要做。 对于我来说,我是在企业防火墙的后面,我们正在使用自签名证书,所以我收到错误unable to get local issuer certificate 。 如果你和我在同一条船上,那么你需要在npmconfiguration文件中设置cafile=选项。 首先,您需要创build一个PEM文件,其中包含有关您的自签名证书的信息。 如果您不知道如何操作,下面是不使用第三方软件的Windows环境的说明:

我们需要明确指出哪些证书应该被信任,因为我们正在使用自签名证书。 对于我的例子,我使用Chrome浏览器访问www.google.com,以便获取证书。

在Chrome中,转到检查 – >安全 – >查看证书。 您将看到所有允许SSL连接的证书。 注意这些证书是如何自签名的。 模糊的部分是我的公司,我们不是一个authentication机构。 您可以将完整证书path导出为P7B文件,也可以将证书单独导出为CER文件(base64编码)。 作为P7B导出完整的path并不是很好,因为您将需要在证书pipe理器中打开此文件,并将其导出为单个CER文件。 在Windows中,双击P7B文件将打开证书pipe理器应用程序。

在这里输入图像描述

以CER格式导出(Base 64)实际上是以下格式的文本文件:

 -----BEGIN CERTIFICATE----- MIIGqzCCBZOgAwIBAgITIwAAABWhFPjwukYhTAADAAAAFTANBgkqhkiG9w0BAQUF ADBFMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGaXJ2aW5n b0pvCkNmjWzaNNUg2hYET+pP5nP75aRu+kPRl9UnlQ....rest of certificate... -----END CERTIFICATE----- 

为了创build我们的PEM文件,我们只需要将这些证书堆叠在一个文件中,然后将扩展名更改为.pem。 我用记事本来做到这一点。

您以相反的顺序从证书path堆叠证书。 因此,我将从* .google.com开始,然后在其下面粘贴Websense,然后发行CA 1等。这样,证书将从顶部到底部进行parsing,以search相应的根CA. 简单包括根CA将不起作用,但我们也不需要包含所有的证书。 从上面的path中,我只需要包含那些位于Websense证书(颁发CA 1,策略CA,根CA)之前的证书。

一旦这些自签名证书被保存到PEM文件,我们准备指示npm使用这些证书作为我们可信的CA. 只需设置configuration文件,你应该很好去:

 npm config set cafile "C:\yourcerts.pem" 

现在,通过设置代理(http和https),并将registry设置为https://registry.npmjs.org ,您应该能够使用自签名证书在公司防火墙后面安装软件包,而不会干扰strict-ssl设置。

我有一个类似的问题,我尝试了上述所有的解决方法,但没有一个为我工作(我在我的密码中使用特殊字符(如'@'符号),我还需要添加域名)。

除此之外,我有点担心把我的密码添加为纯文本。 原来,克服所有这些挑战的最简单的解决scheme是使用某种反向代理(如Fiddler)。

我已经详细说明了这个答案中的configuration步骤。

在工作中,我们使用ZScaler作为我们的代理。 我能够得到npm的唯一方法就是使用Cntlm 。

看到这个答案:

NPM背后的NTLM代理

在.typingsrc文件中添加下面的行帮助了我。

 { "rejectUnauthorized": false, "registryURL" :"http://api.typings.org/" } 

我碰到类似的问题,发现我的npmconfiguration文件(.npmrc)有错误的registry项。 评论出来,并重新运行npm安装。 有效。

操作系统: Windows 7

为我工作的步骤:

  1. npm config get proxy
  2. npm config get https-proxy

  3. 评论:我执行这个命令来知道我的代理设置
    npm config rm proxy

  4. npm config rm https-proxy
  5. npm config set registry=http://registry.npmjs.org/
  6. npm install

试试这个,这是唯一为我工作的:

npm –proxy http://:@proxyhost:–https代理http://:@proxyhost:–strict-ssl false安装-g包

注意选项–strict-ssl false

祝你好运。

试试这个,在npm中设置代理如下

 npm config set proxy "http://<user-name>:<password>@<proxy-url>:<port>" npm config set https-proxy "http://<user-name>:<password>@<proxy-url>:<port>" npm config set strict-ssl false npm config set registry "http://registry.npmjs.org/"