【问题标题】:Bing API Authorization not working - The authorization type you provided is not supported. Only Basic and OAuth are supportedBing API 授权不起作用 - 您提供的授权类型不受支持。仅支持 Basic 和 OAuth
【发布时间】:2012-08-16 14:55:02
【问题描述】:

我最近收到一封来自 Microsoft 的电子邮件,说 Bing 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);

但是,我仍然收到错误“不支持您提供的授权类型。仅支持 Basic 和 OAuth”。

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

【问题讨论】:

  • 您是否对 $q 变量进行了 urlencode?​​span>
  • Microsoft 无法提供见解?
  • @Sandrino Di Mattia 我尝试了 urlencode 但没有帮助。我从 Microsoft 迁移指南中获得了上面的代码:www.bing.com/webmaster/content/developers/ADM_MIGRATION_GUIDE.docx 我在 StackOverflow 上的另一篇文章中找到了相同的代码,但似乎都给出了相同的错误
  • 您找到有效的解决方案了吗?

标签: php azure api bing azure-marketplace


【解决方案1】:

我认为 URL 已更改。此代码有效。请注意第一行中的 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);

【讨论】:

  • 可悲的是,该代码也不起作用 - 仍然给出相同的错误。我想知道这是否与我的服务器有关,但我不这么认为。
  • 有趣。也许有一个代理以某种方式干扰?除了顶部缺少$accountKey = ... 行之外,该代码是我刚刚成功运行的逐字记录。
  • 您的帐户密钥可能是错误的吗?仔细检查datamarket.azure.com/account/keys?
  • 你可能是对的。似乎当我通过浏览器运行该页面时,我可以在密码槽中输入帐户密钥,并且可以轻松返回 JSON 结果。只有当我使用授权通过 PHP 请求 API 时,才会失败。
  • 我已经仔细检查了我的帐户密钥,当我通过浏览器使用 API 时它可以工作。
【解决方案2】:

这是搜索 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);

【讨论】:

  • 感谢您的 CURL 代码,我已经能够解决同样的问题。谢谢。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    我在将网站部署到新服务器时遇到了同样的问题。我认为我的托管公司禁用了一些使用 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 时,这个对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 2015-10-30
      • 2018-07-01
      相关资源
      最近更新 更多