如何使用 JQuery .Ajax 进行 Pingdom 检查?

Posted

技术标签:

【中文标题】如何使用 JQuery .Ajax 进行 Pingdom 检查?【英文标题】:How to get Pingdom checks with JQuery .Ajax? 【发布时间】:2013-04-03 14:04:01 【问题描述】:

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

【问题讨论】:

据我所知,您应该提供的不是 encodeBase64(login) + ":" + encodeBase64(pass),而是 encodeBase64(login + ":" + pass);此外,您的数据提供者似乎需要另一个标头 App-Key;并离开:async:false 是一种非常糟糕的做法。 这就是我正在使用的。抱歉,我想我用过的占位符很难说清楚。只返回“加载资源失败:服务器响应状态为 401(未授权)”并且我确定用户和密码是正确的,因为导航到 api.pingdom.com/api/2.0/checks 并在弹出窗口中输入它们可以正常工作。 确保您还发送了 App-Key 标头。并尝试使用一些网络调试器(我推荐 fiddler,但可以使用 chrome 的 webinspector)来检查您的请求是否确实包含所需的标头。 啊有趣,在 beforesend 函数中添加 xhr.setRequestHeader('App-Key', 'myapikeyhere'); 会返回类似但不同的错误 OPTIONS https://api.pingdom.com/api/2.0/checks 401 (Unauthorized) 我现在一定会检查 fiddler 和 webinspector。 【参考方案1】:

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

您需要使用 jsonp 让您的浏览器允许跨站点的 ajax 请求,但根据this response,不可能在 jsonp 请求中设置标头。

【讨论】:

【参考方案2】:

在任何地方使用 CORS。

我想让一个简单的 jQuery 请求工作,检查我们平台的最后一个 Pingdom 结果。由于 CORS 和需要为身份验证指定自定义标头,这似乎是不可能的。

我不想为这么简单的事情设置代理服务器,所以我找到了 this answer 并且能够使用 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 限制的一种不错且干净的方法。

【讨论】:

以上是关于如何使用 JQuery .Ajax 进行 Pingdom 检查?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 jQuery 进行 ajax 请求后替换页面的整个 CSS?

如何使用jQuery和Ajax对DreamFactory进行基本身份验证

JQuery Ajax - 如何在进行 Ajax 调用时检测网络连接错误

jquery如何进行多个ajax调用[重复]

如何使用 jquery/ajax 对已经从数据库中获取的数据进行排序?

如何使用 Json 数据作为参数进行 Jquery Ajax 调用?