如何设置请求标头?

时间:2017-04-19 12:41:21

标签: jquery

我正在尝试使用jquery从api中提取数据,但我收到错误

无法加载资源:服务器响应状态为401(未授权)

我已将网址设置如下

url: "https://jsonodds.com/api/odds/soccer"

我尝试过两种不同的方式设置标题,

首先

headers: {
                    'JsonOdds-API-Key', key
}

并使用beforesend函数

beforeSend: function (xhr) {
                        xhr.setRequestHeader("JsonOdds-API-Key", key);
                    }

我已经定义了我的密钥。我已经测试了postman上的url和header,它返回数据可能是我写的其他代码有问题吗?

2 个答案:

答案 0 :(得分:1)

jQuery中的ajax调用示例:

      $.ajax({
         url: "https://jsonodds.com/api/odds/soccer",
         data: { signature: authHeader },
         type: "GET",
         beforeSend: function(xhr){xhr.setRequestHeader('JsonOdds-API-Key', key);},
         success: function() { alert('Success!'); }
      });

我发布了一个完整的例子,因为在OP中我看到了调用的不同部分,我想确保你正确构建它。

希望它有所帮助!

更新1:

data: {}
  

要发送到服务器的数据。它被转换为查询字符串if   还不是一个字符串。它附加到GET请求的URL。看到   processData选项可防止此自动处理。对象必须   是键/值对。如果value是一个数组,jQuery序列化多个   具有相同键的值基于传统设置的值

查看文档,它将成为您编码成功的指南:http://api.jquery.com/jquery.ajax/

此外,这篇文章对您非常有用:How do I return the response from an asynchronous call?

干杯! ;)

答案 1 :(得分:0)

此代码应该有效;

$.ajax({ 
    url: 'https://jsonodds.com/api/odds/soccer', 
    headers: { 
        'JsonOdds-API-Key': key 
    } 
});

401错误也可能是格式错误的API密钥的结果。请检查它是否正确,您可以通过打开开发人员工具查看是否已发送自定义标头 - >网络 - >过滤' api /赔率/足球' - >点击请求 - >在右侧滚动并选中请求标题部分。

<强>更新

该API不允许定期的前端ajax调用,因为它们需要ApiKey作为标头,并且不允许跨域请求。要绕过跨域请求,您可以发送JSONP请求,但是您无法发送带有JSONP请求的自定义标头,因此如果您必须发送自定义标头(api密钥),则无法绕过跨域问题。

(index):1 XMLHttpRequest无法加载https://jsonodds.com/api/odds/soccer。对预检请求的响应没有通过访问控制检查:否&#39;访问控制 - 允许 - 来源&#39;标头出现在请求的资源上。起源&#39; https://www.finnair.com&#39;因此不允许访问。响应的HTTP状态代码为401。

测试Curl时,Api键是正确的。在终端粘贴以下内容;

curl -X GET https://jsonodds.com/api/odds -H "JsonOdds-API-Key: yourapikey"

您需要使用某些服务器端解决方案处理对Api的调用,例如NodeJS或PHP。