Выполнение запроса jQuery.ajax через прокси-сервер
Я пишу расширение Chrome. Если вы сделаете запрос jQuery.ajax для обычной http-страницы из страницы, обслуживаемой через https, Chrome заблокирует этот запрос. Мне было интересно, смогу ли я получить запрошенную страницу, используя безопасный прокси.
Итак, возможно ли использовать универсальный прокси-сервер для какого-либо запроса jQuery.ajax? Если так, то как? Обратите внимание, что изменение настроек прокси в браузере не является вариантом.
3 ответа
[И год продолжается...] Если я правильно понял ваш вопрос, вы хотите изменить свой запрос 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!");
});
Да, это.
На работе мы реализовали прокси, который делает именно это:
- Он принимает вызовы веб-службы из того же источника, то,
- на стороне сервера сопоставляет их с веб-сервисом другого происхождения,
- отправляет их туда,
- получает результаты и
- передает их обратно вызывающей стороне.
Таким образом, вы можете соблюдать ту же политику происхождения и работать с другими источниками. Однако вам всегда понадобятся функции прокси на стороне сервера.
Для примера, посмотрите на https://developer.yahoo.com/javascript/howto-proxy.html. Они предлагают реализацию PHP для веб-сервисов Yahoo.
Вам понадобится внешняя библиотека для выполнения запросов Ajax через HTTP-прокси с использованием JQuery. По умолчанию 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);
});