必应 API 授权不起作用 - 不支持提供的授权类型.仅支持基本和 OAuth


Bing API Authorization not working - The authorization type you provided is not supported. Only Basic and OAuth are supported

我最近收到一封来自Microsoft的电子邮件,说必应API正在迁移到Windows Azure Marketplace。新请求之间的主要区别似乎在于身份验证。

在阅读了论坛上的许多帖子后,我发现:

$accountKey = '#########';
$api =  'https://api.datamarket.azure.com/Bing/Search/Web?$format=json&$top=8&Query=';
$context = stream_context_create(array(
    'http' => array(
        'request_fulluri' => true,
        'header'  => "Authorization: Basic " . base64_encode($accountKey . ":" . $accountKey)
    )
));
$request = $api.'%27'.$q.'%27&$skip='.$start;
$result = file_get_contents($request, 0, $context);

但是,我仍然收到错误"您提供的授权类型不受支持。仅支持基本和 OAuth"。

有谁知道我该如何解决这个问题。我也尝试过cURL,但这不起作用。感谢任何能为我找到解决方案的人。

我认为网址已更改。此代码有效。请注意第一行中的 URL:

$api = 'https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/Web?$format=json&$top=8&Query=';
$context = stream_context_create(array(
    'http' => array(
        'request_fulluri' => true,
        'header'  => "Authorization: Basic " . base64_encode($accountKey . ":" . $accountKey)
    )
));
$q = 'test';
$request = $api.'%27'.$q.'%27';
echo file_get_contents($request, 0, $context);

这是搜索 API 的工作示例,只需将您的访问密钥替换为"XXXX"。即使我浪费了相当多的时间来使用它使用 cURL 工作,但它失败了,导致本地:("CURLOPT_SSL_VERIFYPEER

$url = 'https://api.datamarket.azure.com/Bing/Search/Web?Query=%27xbox%27';
$process = curl_init($url);
curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($process, CURLOPT_USERPWD, "username:XXXX");
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($process);
# Deliver
return $response;
# Have a great day!
curl_close($process);

我遇到了同样的问题,现在已经修复,root_url已经改变,现在是这样的:https://user:yourAccountKey@api.datamarket.azure.com/Bing/SearchWeb/Web?Query=%27leo%20fender%27&Market=%27en-US%27&$top=50&$format=JSON>

当我将网站部署到新服务器时,我遇到了同样的问题。我认为我的托管公司禁用了某些功能,file_get_contents外部链接。

    $url = 'https://api.datamarket.azure.com/Data.ashx/Bing/MicrosoftTranslator/v1/Translate?Text=%27'.urlencode($text).'%27&To=%27' . $to . '%27&From=%27' . $from . '%27&$top=100&$format=json';
    $accountKey = 'APIKEY';
    $handle = curl_init ($url);
    if ($handle) {
        $curlOptArr = array(
            CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
            CURLOPT_USERPWD => $accountKey . ':' . $accountKey,
            CURLOPT_RETURNTRANSFER => TRUE
        );
        curl_setopt_array($handle, $curlOptArr);
        $response = curl_exec($handle);
        $data = json_decode($response,true);
        if (is_array($data)) {
            if (isset($data['d']['results'][0]['Text'])) {
                print $data['d']['results'][0]['Text'];
            } else {
                print false;
            }
        } else {
            print $text;
        }
        $errRet = curl_error($handle);
        curl_close($handle);
    }

使用cURL时,这个对我有用。