Выполнение запроса 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!");
});

Да, это.

На работе мы реализовали прокси, который делает именно это:

  1. Он принимает вызовы веб-службы из того же источника, то,
  2. на стороне сервера сопоставляет их с веб-сервисом другого происхождения,
  3. отправляет их туда,
  4. получает результаты и
  5. передает их обратно вызывающей стороне.

Таким образом, вы можете соблюдать ту же политику происхождения и работать с другими источниками. Однако вам всегда понадобятся функции прокси на стороне сервера.

Для примера, посмотрите на 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);
});
Другие вопросы по тегам