Как получить чеки Pingdom с помощью JQuery .Ajax?

Насколько я могу судить, моя проблема в том, что мой запрос GET не авторизован. Но мои попытки добавить авторизацию в заголовках или в виде значений в URL (ключ API, имя пользователя, пароль) не увенчались успехом.

например.

$.ajax({
  type: 'get',
  async:   false,
  beforeSend: function(xhr){
    xhr.setRequestHeader('Authorization', 'Basic encodedusername:passwordhere');
  },
  url: "https://api.pingdom.com/api/2.0/checks",
  success: function(Data) {
    console.log(Data);
  },
    error: function(Data) { 
  }
});

Кто-нибудь может посоветовать, как исправить синтаксис Javascript для взаимодействия с Pingdom API? Я считаю, что пытаюсь неправильно авторизоваться. Их документация посвящена PHP, который я не могу использовать в этой ситуации.

https://www.pingdom.com/services/api-documentation-rest/

2 ответа

Я не думаю, что можно использовать API Pingdom из Javascript в веб-браузере.

Вам нужно будет использовать jsonp, чтобы ваш браузер разрешал запросы ajax между сайтами, но в соответствии с этим ответом невозможно установить заголовки в запросе jsonp.

Используйте CORS Anywhere.

Я хотел получить простой запрос jQuery, который проверил бы последний результат Pingdom для нашей платформы. Из-за CORS и необходимости указывать пользовательские заголовки для аутентификации это казалось невозможным.

Я не хотел настраивать прокси-сервер для чего-то такого простого, поэтому я нашел этот ответ и смог использовать метод CORS Anywhere, который выглядит примерно так:

// Will use the cors-anywhere proxy if jQuery supports it and crossDomain option is passed in.
$.ajaxPrefilter( function (options) {
  if (options.crossDomain && jQuery.support.cors) {
    var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
    options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
    // options.url = "http://cors.corsproxy.io/url=" + options.url;
  }
});

// Use ajax requests as normal.
$.ajax({
  type: 'get',
  async:   false,
  crossDomain: true,
  beforeSend: function(xhr){
    xhr.setRequestHeader('Authorization', 'Basic encodedusername:passwordhere');
  },
  url: "https://api.pingdom.com/api/2.0/checks",
  success: function(Data) {
    console.log(Data);
  },
    error: function(Data) { 
  }
});

ПРИМЕЧАНИЕ. Не используйте это, если вы передаете или получаете конфиденциальную информацию. Вы должны использовать свой собственный прокси, если вы делаете это. Но если вы просто получаете общедоступные данные, как мы, то это должен быть хороший и чистый способ обойти ограничение CORS.

Другие вопросы по тегам