我有以下 .pac 文件:
function FindProxyForURL(url, host)
{
return "PROXY proxy.example.com:8080; DIRECT;";
}
DIRECT
我在 Firefox 13 中使用 FoxyProxy,我原本以为如果指定的代理不可用,它会回退到该代理。但我收到了以下消息Firefox 配置为使用无法找到的代理服务器。我的期望是否落空了?有没有什么方法可以让它按照我的期望运行?
答案1
您应该明确地告诉它直接进入。
控制这一点的最佳方法是检测你所在的网络。下面是一个稍微复杂一点的 proxy.pac 示例:
function FindProxyForURL(url, host) {
// Variables
var proxy_LAN1 = "PROXY 10.61.9.200:8080; DIRECT;";
var LAN1_addr_ip4 = "10.97.100.0";
var LAN1_addr_ip6 = "fe80::b892:6a74:9635:*"; // Needed for FF/TB (Mozilla)
var proxy_no = "DIRECT";
var alert_done = 99;
//alert("My Addr: " + myIpAddress() + "\nURL: " + url + "\nHost: " + host);
// If address is local, always go direct
if( isPlainHostName(host) ) {
//alert("Local address so no proxy");
return proxy_no;
}
// Proxy if PC is on LAN1
if (isInNet(myIpAddress(), LAN1_addr_ip4, "255.255.255.0") || shExpMatch(myIpAddress(), LAN1_addr_ip6) ) {
//alert("LAN1 address & proxy");
return proxy_LAN1;
}
// Default to a direct connection
// alert("Default proxy (none)");
return proxy_no;
}
/*
NOTES:
Use alert("xxx") to find out what is happening. IE displays a pop-up, FF/TB use the error console
Can have multiple proxies to try. Separate each with ;
For local pac files, IE requires "file://c:\proxy.pac", FF/TB require file:///c:\proxy.pac" (extra /)
FF/TB - myIpAddress() returns an IPv6 rather than IPv4 address for Vista and Win7 so isInNet() doesn't work!
FUNCTIONS:
alert(text)
isPlainHostName(host)
shExpMatch(lookup, match)
isInNet(address, lookup.address, netmask)
myIpAddress()
dnsDomainIs(host, ".foobar")
EXAMPLES:
if (shExpMatch(url, "http://192.168.1.100*")) { return proxy_no; }
if (isInNet(myIpAddress(), "192.168.1.0", "255.255.255.0"))
*/
如您所见,这会尝试检测我们是否在特定网络上,并且仅在属实时才设置代理。
答案2
根据MDN 文档,看来你的期望是有道理的。我认为问题可能是返回字符串中的尾随分号。相反,尝试
function FindProxyForURL(url, host)
{
return "PROXY proxy.example.com:8080; DIRECT";
}
MDN 上的所有示例都仅使用 semi 作为分隔符,最后一个项目上没有尾随的 semi。
PROXY w3proxy.netscape.com:8080; PROXY mozilla.netscape.com:8081; DIRECT
Same as above, but if both proxies go down, automatically start making direct connections. (In the first example above, Netscape will ask user confirmation about making direct connections; in this case, there is no user intervention.)
尝试一下并让我们知道效果如何。