19

在 Windows 上,是否可以将 Atom 配置为使用系统默认代理,而不是在.apmrc文件中手动指定代理设置?


我最近开始使用适用于 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 更改

.apmrc中指定的代理服务器 .apmrc 中指定的代理服务器

编辑 2015 年 8 月 31 日

针对部分反馈,我尝试查看.pac文件,提取代理服务器地址信息。我能够从文件中获取有关代理的信息并将其放入.apmrc文件中,但它对结果没有影响(我仍然收到相同的错误)。从那以后,我也尝试使用CNTLM无济于事。

另请注意,我的代理确实需要如上所述的身份验证。我一直在对这个问题做进一步的研究,它可能是APMGitHub 的代理设置和代理设置的组合。请参阅以下相关文章:

理想情况下,我想要一个不需要完整的机器配置或脆弱的多配置文件设置的解决方案。

4

3 回答 3

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/http://registry.npmjs.org/. 由于apm也使用相同的注册表,我决定也更改它:

apm config set registry http://registry.npmjs.org/

然后......似乎也有助于进入 Atom'sconfig.csoncore.proxy设置http://localhost:<port # from cntlm.ini>

毕竟,我希望事情对你有用。如果它又酷又好并且 Atom 运行良好,那么您可能还想做一件事,这将使大多数(所有?)其他应用程序(npm、git 等)运行良好。在命令行上,运行:

netsh winhttp set proxy localhost:<port # from cntlm.ini> "localhost, 127.0.0.*"

这将为您省去一一配置大多数(全部?)其他应用程序的麻烦。由于某种原因,apm确实需要专门配置。我猜它出于某种原因不使用 winhttp 设置?我不知道答案。

新信息 2016/03/18

我最近注意到,对于某些应用程序,您可能还需要做一件事。您还应该将以下环境变量设置为本地代理:

HTTP_PROXY
HTTPS_PROXY
FTP_PROXY
http_proxy
https_proxy
ftp_proxy

设置大写和小写似乎有点矫枉过正,但我​​最近安装了 MSys2,发现它会查找小写版本,所以只需将它们全部设置好,省点麻烦。

于 2015-08-31T09:46:29.140 回答
4

您应该下载文件http://internal-server-name/sub-dir/file-name.pac并使用文本编辑器打开它,然后在其中找到实际的代理地址和端口(靠近PROXY关键字)。

于 2014-10-26T05:50:21.467 回答
1

我用它来解决 npm 和 .npmrc 的问题

c:\users\%user%\.atom\.apmrc(如果不存在添加)并把这个

proxy=http://YOUR-DOMAIN**%5C**USER-NAME:PASSWORD@YOUR-PROXY-SERVER:PORT/
于 2016-12-27T13:10:40.727 回答