在 Windows 7 + IE10 等较旧的系统上,调用 PAC 文件中的“alert()”会导致显示对话框。但是,在 Windows 8.1 上,即使 IE11 似乎正在使用 PAC,也不会显示任何对话框。
我目前的情况是 IE11 可以正常使用 (SOCKS) 代理(由 PAC 返回),但 Modern UI 应用完全与互联网断开连接。IE11 和 Modern UI 似乎对 PAC 设置的处理方式不同,但我找不到调试它的方法。
总而言之,我的问题是
- 我该如何使用IE11在 Windows 8.1 上?
- 我该如何使用现代用户界面在 Windows 8.1 上?
答案1
IE11 PAC 文件更改
微软对 IE11 处理本地 PAC 文件的方式进行了更改。您可以阅读有关它们的信息这里或参阅下文了解一些快速信息。
另请注意,alert()
语句不再工作从 Windows 8 开始。
使用 IE11 时,除非添加以下注册表项,否则无法再通过文件协议使用 PAC 文件:
[HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings]
(DWORD)"EnableLegacyAutoProxyFeatures"=1
笔记:使用 Windows 8 或更高版本时将不再出现警报语句!
使用 AUTOPROX 调试 PAC 文件 (下载链接)
有时,您只需要测试您的 PAC 文件,看看是否返回了预期的路由,尽管您无法访问相关网站。对于此类测试,您可以使用 Pierre-Louis Coll 创建的(随附)命令行实用程序工具 autoprox.exe。
当以无附加参数的方式启动它时,
CMD
将显示用法:
C:\temp>autoprox
Version : 2.1.0.0
Written by [email protected]
Usage : AUTOPROX -s (calling DetectAutoProxyUrl and saving wpad.dat file in temporary file)
Usage : AUTOPROX [-h] url [Path to autoproxy file]
-h: calls InternetInitializeAutoProxyDll with helper functions implemented in AUTOPROX
AUTOPROX url: calling DetectAutoProxyUrl and using WPAD.DAT logic to find the proxy for the url
AUTOPROX url path: using the autoproxy file from the path to find proxy for the url
Example: autoprox -s
Example: autoprox http://www.microsoft.com
Example: autoprox -h http://www.microsoft.com c:\inetpub\wwwroot\wpad.dat
Example: autoprox http://www.microsoft.com http://proxy/wpad.dat
以下是我们的示例的输出:
C:\temp>autoprox http://us.msn.com c:\temp\sample.pac
The Winsock 2.2 dll was found okay
url: http://us.msn.com
autoproxy file path is : c:\temp\sample.pac
Calling InternetInitializeAutoProxyDll with c:\temp\sample.pac
Calling InternetGetProxyInfo with url http://us.msn.com and host us.msn.com
Proxy returned for url http://us.msn.com is:
PROXY myproxy:80;
当你想查看调用了哪些 DNS 相关函数时,可以另外使用参数“-h”:这里是使用此选项时的输出:
C:\temp>autoprox -h http://us.msn.com c:\temp\sample.pac
The Winsock 2.2 dll was found okay
Will call InternetInitializeAutoProxyDll with helper functions
url: http://us.msn.com
autoproxy file path is : c:\temp\sample.pac
Calling InternetInitializeAutoProxyDll with c:\temp\sample.pac
Calling InternetGetProxyInfo with url http://us.msn.com and host us.msn.com
ResolveHostByName called with lpszHostName: us.msn.com
ResolveHostByName returning lpszIPAddress: 65.55.206.229
Proxy returned for url http://us.msn.com is:
PROXY myproxy:80;
autoprox.exe 中的错误处理:
当您指定一个不存在的 PAC 文件(例如命令行中的拼写错误)时,autoprox.exe 的结果将是:
ERROR: InternetInitializeAutoProxyDll failed with error number 0x6 6.
当 Pac 文件包含语法错误时,您通常会收到以下消息:
ERROR: InternetGetProxyInfo failed with error number 0x3eb 1003.
完成本地测试后,应将 PAC 文件复制到 Web 服务器,然后通过 http 协议进行访问。
答案2
有一个工具pactester
是解析器,@oviava 在评论中提到过,它适用于 Windows 和基于 Unix 的系统,包括 Linux(例如sudo apt install libpacparser1
)和 MacOS(例如brew install pacparser
)。这可用于测试 PAC 文件 - 它将显示该 URL 的预期行为或报告 PAC 文件中的任何错误。例如
pactester -p your_pac_file.pac -u http://www.test_site.com