Windows下设置http_proxy遇问题:Ping超时及407认证失败求助
我翻了一堆相关帖子还是没搞定这个问题:在Windows 8.1系统的CMD里,我想设置http_proxy和https_proxy环境变量来访问公司的Web代理。目前系统配置的代理地址是proxy01.company.com,端口8080,我处于company.com域内,域用户名是company\B.amini,密码是BA@123。
另外有个特殊情况:执行ping proxy01.company.com时,CMD显示正在ping tmg01.company.com [192.168.39.21],但一直请求超时。
我现在有三个疑问:
- Ping代理地址请求超时的原因可能是什么?
- 代理凭据是否与域凭据相同?
- 在CMD中设置
http_proxy变量的正确方式是什么?
- 在CMD中设置
我已经尝试了多种配置,包括:
Set http_proxy=http://company%5CB.amini:BA%40123@192.168.39.21:8080 Set http_proxy=http://B.amini:BA%40123@192.168.39.21:8080 Set http_proxy=company%5CB.amini:BA%40123@proxy01.company.com:8080 Set http_proxy=B.amini:BA%40123@proxy01.company.com:8080 Set http_proxy=proxy01.company.com:8080 Set http_proxy=http://192.168.39.21:8080
但不管用哪种配置,执行Curl www.google.com -I都会返回错误:
HTTP/1.1 407 Proxy Authentication Required (Forefront TMG requires authorization to fulfill the request. Access to the Web Proxy filter is denied.)
问题解答
1. Ping代理地址请求超时的原因
从错误信息能看出来你们用的是Forefront TMG代理,这个代理默认是**拦截ICMP请求(也就是ping)**的,目的是避免服务器被外部探测。所以ping超时完全是正常现象,不代表代理服务不可用,不用纠结这个点。当然也不排除网络路由的问题,但结合后面的407认证错误,大概率就是TMG本身禁用了ping响应。
2. 代理凭据是否与域凭据相同
TMG代理通常会和公司域集成,所以你的域凭据company\B.amini和密码BA@123应该就是代理需要的认证信息。除非IT部门单独配置了代理专用账号,但这种情况很少见,优先用域凭据尝试就好。
3. CMD中设置http_proxy的正确方式
你之前的配置有几个细节没注意到,正确的设置方式要关注这几点:
- 必须带上
http://前缀,不然部分工具(比如curl)会解析失败; - 域用户名里的反斜杠
\要转成%5C,密码里的@转成%40,这部分你已经做对了,但要确保整个URL格式完整; - 优先用代理主机名
proxy01.company.com而非IP,因为IP可能变动,且TMG可能绑定了主机名相关的访问规则。
正确的环境变量设置命令是:
set http_proxy=http://company%5CB.amini:BA%40123@proxy01.company.com:8080 set https_proxy=http://company%5CB.amini:BA%40123@proxy01.company.com:8080
另外,Windows下的curl有时候对URL里直接带凭据的支持不太好,你可以试试用参数指定代理和认证:
curl www.google.com -I --proxy proxy01.company.com:8080 --proxy-user company\B.amini:BA@123
如果还是报407,那大概率是TMG要求NTLM认证,这时候需要加上--proxy-ntlm参数:
curl www.google.com -I --proxy proxy01.company.com:8080 --proxy-ntlm --proxy-user company\B.amini:BA@123
要是以上方法都不行,那可能是你的账号没有被IT部门授权使用TMG代理,这时候就得联系公司IT确认访问规则了。
内容的提问来源于stack exchange,提问作者Bahman_Aries

