2014-12-05 48 views
4

我正在向Bing搜索API发送ajax请求。当我将它放入浏览器时,我用于请求的URL有效。随着阿贾克斯我得到一个401错误"The authorization type you provided is not supported. Only Basic and OAuth are supported"Bing API请求的Ajax授权标头是什么?

因此我的头是错误的。它在浏览器中工作,因为我手动输入了我的天蓝色帐户密钥。

<script> 
     $scope.bingsearch = function() { 

      var azurekey = '....vjrQiHPp4ct1meqroX2pzQZhPvE'; 
      var keywords = $scope.inputvalue; 
      var myurl = 'https://api.datamarket.azure.com/Bing/Search/v1/Composite? 
        Sources=%27web%27&$format=json&Query=%27'+ keywords + '%27'; 

      $http({ 
       method: 'POST', 
       url: myurl, 
       headers:{ 
        'Authorization': 'Basic ' + azurekey 
       } 
      }).success(function(data){ 
       var searchresults = angular.fromJson(+data); 
       $scope.searchresult = searchresults; 
      }) 
     }; 
</script> 

URL https://api.datamarket.azure.com/Bing/Search/v1/Composite?Sources=%27web%27&$format=json&Query=%27van%20gogh%27适用于浏览器。

如何设置我的标题以便它能接受我的帐户密钥?

回答

14

我想通了。我不得不在Base64中对我的Azure键进行编码,这些标题以冒号前缀我去了this website 并粘贴了一个冒号“:”加上我的Azure账号密钥和base64'd它。

所以我的重点OQA/cs成为:OQA/cs然后base64'd到Ok9RQS9jcw==和最终的头看起来像

   `headers: { 
        'Authorization': 'Basic Ok9RQS9jcw==' 
       }` 

和Bing返回我想要的JSON。在编码之前,不要忘记将冒号作为的第一个字符包含在您的帐户密钥以便Base64将其编码为您的密钥的一部分。

相关问题