5

据我所知,我的问题是我的 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) { 
  }
});

任何人都可以建议更正与 Pingdom API 交互的 Javascript 语法吗?我相信我试图错误地授权他们的文档侧重于我无法在这种情况下使用的 PHP。

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

4

2 回答 2

0

我认为不可能在网络浏览器中使用来自 Javascript 的 Pingdom API。

您需要使用 jsonp 让您的浏览器允许跨站点的 ajax 请求,但根据此响应,无法在 jsonp 请求中设置标头。

于 2013-10-19T12:02:06.510 回答
0

在任何地方使用 CORS。

我想让一个简单的 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 限制的一种不错且干净的方法。

于 2017-05-30T04:47:33.283 回答