我正在编写一个 Chrome 扩展程序。如果您从通过 https 提供的页面中对常规 http 页面发出 jQuery.ajax 请求,则该请求会被 Chrome 阻止。我想知道是否可以使用安全代理获取请求的页面。
那么,是否可以对一些 jQuery.ajax 请求使用通用代理服务器?如果是这样,怎么做?请注意,更改浏览器的代理设置不是一种选择。
我正在编写一个 Chrome 扩展程序。如果您从通过 https 提供的页面中对常规 http 页面发出 jQuery.ajax 请求,则该请求会被 Chrome 阻止。我想知道是否可以使用安全代理获取请求的页面。
那么,是否可以对一些 jQuery.ajax 请求使用通用代理服务器?如果是这样,怎么做?请注意,更改浏览器的代理设置不是一种选择。
是的。
我们在工作中所做的是实现一个代理,它可以做到这一点:
这样,您既可以遵守相同的原产地政策,又可以使用其他原产地。但是,您将始终需要服务器端代理功能。
[一年过去了......]如果我正确理解了您的问题,您想根据您当前所在的网页更改您的 AJAX 请求。jQuery 提供了许多与AJAX 相关的方法,可以帮助您解决这个问题。
我的建议是使用jQuery.ajaxPrefilter
和调整您的查询以使用代理而不是原始主机。文档中的一个示例:
$.ajaxPrefilter(function( options ) {
if ( options.crossDomain ) {
options.url = "http://example.com/proxy/" + encodeURIComponent( options.url );
options.crossDomain = false;
}
});
为了增加一点趣味,您还可以使用任何全局 AJAX 事件处理程序来监视您的请求。例如查看是否有任何请求失败:
$( document ).ajaxError(function() {
console.log("Somethin' went wrawng!");
});
您需要一个外部库来使用 JQuery 通过 HTTP 代理执行 Ajax 请求。开箱即用的 JQuery 没有此功能。一个例子是https://www.AjaxProxy.com,它可以与您的查询一起使用,如下所示;
ajaxProxy.proxy.url = "http://your proxy";
ajaxProxy.proxy.credentials.username = "proxy username";
ajaxProxy.proxy.credentials.password = "proxy password";
$.ajax({
type: "GET",
url: "https://ICANHAZIP.COM",
headers: ajaxProxy.proxyHeaders(),
dataType: "text"
}).done (function (data) {
console.log(data);
});