如何使用javascript检测代理

时间:2013-11-04 12:16:55

标签: javascript proxy

在网页中,有没有办法通过javascript检测网络浏览器是否正在使用PAC文件http://xxx.xx.xx.xxx/toto.pac? 注意:可以在许多PAC后面查看同一页面,我不想使用服务器端语言,如果需要,我可以编辑toto PAC文件。此致

3 个答案:

答案 0 :(得分:6)

您可以向已知的外部服务器(google.com)发出ajax请求,然后从该请求中获取标头,以查看代理标头是否在请求中...

var proxyHeader = 'via';
var req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send();
var header = req.getResponseHeader(proxyHeader);
if (header) {
    // we are on a proxy
}

proxyHeader更改为代理添加到响应中的内容。

编辑:您必须添加条件以支持XMLHttpRequest

的IE实现

编辑:

我在代理工作,我刚刚在jsfiddle中测试了这段代码,它确实有效。可以做得更漂亮,以便支持IE并执行异步获取,但一般功能是... http://jsfiddle.net/unvHW/

事实证明,检测'via'要好得多......

答案 1 :(得分:1)

请注意,此解决方案不适用于每个代理,并且可能仅在您拥有代理时才有效:

某些代理在HTTP请求的响应标头中附加一个字段,该字段名为:X-Forwarded-For

例如,您可以通过向google.com发送AJAX请求来实现您要执行的操作,并检查字段是否存在。

这样的事情:

  $.ajax({
   type: 'POST',
   url:'http://www.google.com',
   data: formData,
   success: function(data, textStatus, request){
        if(request.getResponseHeader('X-Forwarded-For')) !== undefined)
            alert("Proxy detected !");
   }
  });

编辑:正如迈克尔所说,X-Forwarded-For仅附加到请求中。您最好检查代理放在响应头中的响应头。

答案 2 :(得分:-2)

没有。

浏览器不会将这类配置数据暴露给网站。