在Windows上,是否可以将Atom配置为使用系统默认代理而不是在 .apmrc 文件中手动指定代理设置?
我最近开始使用{{3>} for Windows( Windows 7 Pro ),到目前为止我喜欢它。我一直在寻找一些时间来尝试让编辑能够连接到外部世界并且没有取得任何成功。
我们的网络(我不是网络专家)配置为使用代理服务器(内部)访问互联网。在我的系统上,这是在代理设置中使用“自动配置脚本”完成的,例如:http://internal-server-name/sub-dir/file-name.pac
。
许多资源建议在 .apmrc 文件中手动设置代理信息:
由于我需要系统默认工作
,因此这些问题无法回答我的问题我尝试将Atom配置为执行同样的操作,但是当我将 .apmrc 文件更改为:
http-proxy = http://internal-server-name/sub-dir/file-name.pac
https-proxy = https://internal-server-name/sub-dir/file-name.pac
strict-ssl = false
我收到以下错误(大概是因为上面的地址不是代理本身):
tunneling socket could not be established, cause=Parse Error
当我放弃 .apmrc 文件时,我在尝试查看软件包时收到以下错误:
getaddrinfo ENOTFOUND
即使我有一个要指定的代理服务器IP地址和端口号,我不仅不想在配置文件中对我的凭据进行硬编码,而且我非常确定以某种方式设置认证以使用Kerberos令牌无论如何,所以我根本无法指定它们。
有趣的是,Atom更新说我已安装的软件包(开箱即用)是最新的,这似乎表明这部分正在运行而软件包和主题没有。
以下是一些参考屏幕截图:
否 .apmrc 更改
.apmrc 中指定的代理服务器
为了回应一些反馈,我尝试查看 .pac 文件并提取代理服务器地址信息。我能够从文件中获取有关代理的信息并将其放在 .apmrc 文件中,但它对结果没有影响(我仍然收到相同的错误)。我也尝试过使用 CNTLM 无效。
另请注意,我的代理 要求如上所述进行身份验证。我一直在进一步研究这个问题,它可能是APM
的代理设置和GitHub的代理设置的组合。请参阅以下相关文章:
理想情况下,我想要一个不需要完整的机器配置或脆弱的多配置文件设置的解决方案。
答案 0 :(得分:6)
.pac
文件只是一个javascript文件,浏览器可以运行以编程方式确定要使用的代理。如果您的网络需要使用不同的代理来访问不同的资源,这将非常有用。如果您打开该文件,您可能能够理解它(毕竟它只是javascript)并找出您的网络用于一般访问网络的代理。将其设置为.apmrc
文件中的代理,它应该可以正常运行。
如果您的代理需要某种身份验证,事情会变得更复杂。如果这是你的问题,请告诉我。我有一些处理它的经验。
好的,所以你需要进行身份验证。那么你的情况可能与我的非常相似。你使用CNTLM是正确的,我们只需要正确配置它。您的cntlm.ini
文件将如下所示:
Username <your windows username>
Domain <your domain name>
Password <leave this blank>
PassLM <get this by running `cntlm -H` on the command line>
PassNT <get this by running `cntlm -H` on the command line>
PassNTLMv2 <get this by running `cntlm -H` on the command line>
Proxy <Your proxy address like ip_address:port>
Proxy <If you have multiple proxies, you may list them each on a new line>
NoProxy localhost, 127.0.0.*, <any others that should bypass the proxy>
Listen <a local port to listen on (I use 53128)>
你应该知道这个文件(cntlm.ini
)有点有趣。当您安装cntlm时,它会包含在程序的文件夹中,但它实际上只有在它位于C:\Program Files (x86)\cntlm\cntlm.ini
时才有效。我想它可能更准确地说它应该在cntlm
目录中的PROGRAMFILES
文件夹中,所以你应该仔细检查是否是这种情况。
无论如何,完成所有这些后,您现在可以启动cntlm
(自述文件中的说明)。接下来,您需要配置apm
以实际使用本地代理。您的.apmrc
应如下所示:
http-proxy = http://localhost:<port # from cntlm.ini>
https-proxy = https://localhost:<port # from cntlm.ini>
strict-ssl = false
你认为这已经足够了,但还有更多可能会有所帮助。我npm
遇到了很多问题,直到我发现https
在cntlm
内无法正常工作,所以我需要将注册表从https://registry.npmjs.org/
更改为{{} 1}}。由于http://registry.npmjs.org/
也使用相同的注册表,我决定也改变它:
apm
然后......似乎也有助于进入Atom的apm config set registry http://registry.npmjs.org/
并将config.cson
设置为core.proxy
毕竟,我希望事情对你有用。如果它很酷又很好并且Atom运行良好,还有一件事你可能想做,这将使大多数(所有?)其他应用程序(npm,git等)运行良好。在命令行上,运行:
http://localhost:<port # from cntlm.ini>
这将为您省去配置大多数(所有?)其他应用程序的麻烦。出于某种原因,netsh winhttp set proxy localhost:<port # from cntlm.ini> "localhost, 127.0.0.*"
确实需要进行专门配置。我想它出于某种原因并没有使用winhttp设置?我不知道答案。
我最近注意到,对于某些应用,您可能还需要做一件事。您还应将以下环境变量设置为本地代理:
apm
设置大小写似乎有些过分但我最近安装了MSys2并发现它寻找小写版本所以只需设置它们并省去一些麻烦。
答案 1 :(得分:4)
您应该下载文件http://internal-server-name/sub-dir/file-name.pac
并使用文本编辑器打开它,然后在其中找到实际的代理地址和端口(靠近PROXY
关键字)。
答案 2 :(得分:0)
我用npm和.npmrc
解决了这个问题 c:\users\%user%\.atom\.apmrc
(如果不存在则添加)并将此
proxy=http://YOUR-DOMAIN**%5C**USER-NAME:PASSWORD@YOUR-PROXY-SERVER:PORT/