如何使用header参数发送HTTP请求?

Far*_*san 9 javascript api json http callback

我对javascript和网络编程很新,我需要一些帮助.我有一个HTTP请求,我需要通过javascript发送,并需要将输出存储在一个变量中.我尝试只使用调用url:

https://api.fantasydata.net/nfl/v2/JSON/PlayerSeasonStats/2015
Run Code Online (Sandbox Code Playgroud)

但它返回一个身份验证错误,因为我没有发送我的API密钥,它没有告诉我如何只在URL中执行它.API密钥被列为标题而不是参数,我不知道如何处理它.我尝试使用XMLHttpRequest()类,但我不太确定我到底知道它做了什么,也不能让它工作.

实际的HTTP请求

GET https://api.fantasydata.net/nfl/v2/JSON/PlayerSeasonStats/2015 HTTP/1.1
Host: api.fantasydata.net
Ocp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••
Run Code Online (Sandbox Code Playgroud)

我只需要弄清楚如何发送该请求以及密钥以及如何存储它作为javascript中的变量返回的JSON文档.

编辑:这是我到目前为止:

function testingAPI(){
var key = "8a1c6a354c884c658ff29a8636fd7c18";
httpGet("https://api.fantasydata.net/nfl/v2/JSON/PlayerSeasonStats/2015",key    );
alert(xmlHttp.responseText);
var x = 0;
}

function httpGet(theUrl,key)
{
var xmlHttp = new XMLHttpRequest();

xmlHttp.open( "GET", theUrl, false ); // false for synchronous request
xmlHttp.setRequestHeader("Ocp-Apim-Subscription-Key",key);
xmlHttp.send( null );
return xmlHttp.responseText;
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

小智 10

如果它说API密钥被列为标题,那么您很可能需要在headershttp请求的选项中进行设置.通常是这样的:

headers: {'Authorization': '[your API key]'}
Run Code Online (Sandbox Code Playgroud)

以下是另一个问题的示例

$http({method: 'GET', url: '[the-target-url]', headers: {
  'Authorization': '[your-api-key]'}
});
Run Code Online (Sandbox Code Playgroud)

编辑: 刚看到你想将响应存储在一个变量中.在这种情况下,我可能只是使用AJAX.像这样的东西:

$.ajax({ 
   type : "GET", 
   url : "[the-target-url]", 
   beforeSend: function(xhr){xhr.setRequestHeader('Authorization', '[your-api-key]');},
   success : function(result) { 
       //set your variable to the result 
   }, 
   error : function(result) { 
     //handle the error 
   } 
 }); 
Run Code Online (Sandbox Code Playgroud)

我从这个问题得到了这个,我在工作,所以我现在无法测试它,但看起来很稳固

编辑2:很确定你应该能够使用这一行:

headers: {'Authorization': '[your API key]'},
Run Code Online (Sandbox Code Playgroud)

而不是beforeSend第一次编辑中的行.这对你来说可能更简单


小智 7

使用您自己的代码和不使用 jQuery的轻微更改

function testingAPI(){ 
    var key = "8a1c6a354c884c658ff29a8636fd7c18"; 
    var url = "https://api.fantasydata.net/nfl/v2/JSON/PlayerSeasonStats/2015";
    console.log(httpGet(url,key)); 
}


function httpGet(url,key){
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", url, false );
    xmlHttp.setRequestHeader("Ocp-Apim-Subscription-Key",key);
    xmlHttp.send(null);
    return xmlHttp.responseText;
}
Run Code Online (Sandbox Code Playgroud)

谢谢你

  • [弃用] 主线程上的同步 XMLHttpRequest 已弃用,因为它对最终用户的体验有不利影响。如需更多帮助,请查看 https://xhr.spec.whatwg.org/。 (3认同)