Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript检测代理_Javascript_Proxy - Fatal编程技术网

如何使用javascript检测代理

如何使用javascript检测代理,javascript,proxy,Javascript,Proxy,在网页中,是否有方法通过javascript检测web浏览器是否使用PAC文件? 注意:同一页可以在许多PAC后面查看,我不想使用服务器端语言,如果需要,我可以编辑toto PAC文件。关于否 浏览器不会向网站公开此类配置数据。请注意,此解决方案不会在每个代理上都起作用,并且可能仅在您支持代理时起作用: 一些代理在HTTP请求的响应头中附加一个字段,该字段称为:X-Forwarded-For 例如,您可以通过向google.com发送AJAX请求,并检查字段是否存在,从而实现您的目标 大概是这样

在网页中,是否有方法通过javascript检测web浏览器是否使用PAC文件? 注意:同一页可以在许多PAC后面查看,我不想使用服务器端语言,如果需要,我可以编辑toto PAC文件。关于


浏览器不会向网站公开此类配置数据。

请注意,此解决方案不会在每个代理上都起作用,并且可能仅在您支持代理时起作用:

一些代理在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 !");
   }
  });

编辑:正如Michael所说,X-Forwarded-For只附加在请求之后。您最好检查代理放入响应头中的响应头。

您可以向已知的外部服务器(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实现

编辑:

我在工作中使用代理,我刚刚在JSFIDLE中测试了这段代码,它可以正常工作。可以做得更漂亮,这样它支持IE,并执行异步get,但一般的功能是存在的


事实证明,检测“via”要好得多…

我不是100%,但我认为“X-Forwarded-For”只是附加在请求之后。。但是很荣幸能得到和我一样的答案,哈哈,恐怕我没有提到我总是支持代理,所以用你的解决方案,我只会检测代理是否被使用,而不会替换if(request.getResponseHeader('someResponseField')!==如果(request.getResponseHeader('someResponseField')=“您的代理的响应字段值”)非常确定,除非您的代码托管在那里,否则您将无法访问AJAX www.google.com。您必须在您所在的域上使用AJAX技术。事实上,这看起来很熟悉;)好的,谢谢你,但是看起来via参数在不同浏览器中采用不同的值,而代理身份验证丢失了…@dinine抱歉,mate我没有(这可能是一个网络板的参数),但是你会在我上面的编辑中看到,我在工作中尝试过这个,并且使用“via”作为标题确实有效。