Bing API请求的Ajax授权标头是什么?

时间:2014-12-05 07:54:11

标签: http azure bing-api

我正在向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可在浏览器中使用。

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

1 个答案:

答案 0 :(得分:14)

我明白了。我不得不在标题中对我的Azure密钥进行Base64编码,以冒号为前缀。我去了this website 并粘贴冒号“:”加上我的Azure帐户密钥和base64d它。

因此我的密钥OQA/cs变为:OQA/cs,然后base64进入Ok9RQS9jcw==,最终标题看起来像

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

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