Search code examples
javascriptjsonapihttpcallback

How to send an HTTP request with a header parameter?


I'm very new to javascript and web programming in general and I need some help with this. I have an HTTP request that I need to send through javascript and get need to store the output in a variable. I tried using just the call url:

https://api.fantasydata.net/nfl/v2/JSON/PlayerSeasonStats/2015

But it returns an authentication error because I didn't send my API key and it doesn't show me how to do it just in the URL. The API key is listed as a header and not a paramater and I'm not sure what to do with that. I tried using the XMLHttpRequest() class but I'm not quite sure I understand exactly what it does nor could I get it to work.

The actual HTTP Request

GET https://api.fantasydata.net/nfl/v2/JSON/PlayerSeasonStats/2015 HTTP/1.1
Host: api.fantasydata.net
Ocp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••

I just need to figure out how to send that request along with the key and how to store the JSON doc it returns as a variable in javascript.

EDIT: This is what I have so far:

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;
}

Thank you!


Solution

  • If it says the API key is listed as a header, more than likely you need to set it in the headers option of your http request. Normally something like this :

    headers: {'Authorization': '[your API key]'}
    

    Here is an example from another Question

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

    Edit : Just saw you wanted to store the response in a variable. In this case I would probably just use AJAX. Something like this :

    $.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 
       } 
     }); 
    

    I got this from this question and I'm at work so I can't test it at the moment but looks solid

    Edit 2: Pretty sure you should be able to use this line :

    headers: {'Authorization': '[your API key]'},
    

    instead of the beforeSend line in the first edit. This may be simpler for you