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

ian*_*ell 4 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>
Run Code Online (Sandbox Code Playgroud)

该URL https://api.datamarket.azure.com/Bing/Search/v1/Composite?Sources=%27web%27&$format=json&Query=%27van%20gogh%27在浏览器中工作.

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

ian*_*ell 14

我想到了.我不得不在标题中使用Base64编码我的Azure密钥,前缀为冒号.我去了这个网站 并粘贴了冒号":"加上我的Azure帐户密钥和base64'd.

所以我的密钥OQA/cs变成了:OQA/csbase64'd Ok9RQS9jcw==,最后的标题看起来像

                `headers: {
                    'Authorization': 'Basic Ok9RQS9jcw=='
                 }`
Run Code Online (Sandbox Code Playgroud)

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