我正在向Bing Search API发送ajax请求。我将其用于请求的URL在我将其放入浏览器时起作用。使用ajax,我收到401错误"The authorization type you provided is not supported. Only Basic and OAuth are supported"
因此我的标题错了。它在浏览器中工作,因为我手动输入我的azure帐户密钥。
<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>
网址https://api.datamarket.azure.com/Bing/Search/v1/Composite?Sources=%27web%27&$format=json&Query=%27van%20gogh%27
可在浏览器中使用。
如何设置标题以便它接受我的帐户密钥?
答案 0 :(得分:14)
我明白了。我不得不在标题中对我的Azure密钥进行Base64编码,以冒号为前缀。我去了this website 并粘贴冒号“:”加上我的Azure帐户密钥和base64d它。
因此我的密钥OQA/cs
变为:OQA/cs
,然后base64进入Ok9RQS9jcw==
,最终标题看起来像
`headers: {
'Authorization': 'Basic Ok9RQS9jcw=='
}`
并且Bing返回我想要的json。在编码之前,不要忘记将冒号包含在您的帐户密钥的第一个字符 中,以便Base64将其编码为密钥的一部分。