Php Bing API授权不起作用-不支持您提供的授权类型。仅支持Basic和OAuth
我最近收到了一封来自微软的电子邮件,说Bing API正在转移到WindowsAzure市场。新请求之间的主要区别似乎是身份验证 在阅读了论坛上的许多帖子后,我发现:Php Bing API授权不起作用-不支持您提供的授权类型。仅支持Basic和OAuth,php,azure,api,bing,azure-marketplace,Php,Azure,Api,Bing,Azure Marketplace,我最近收到了一封来自微软的电子邮件,说Bing API正在转移到WindowsAzure市场。新请求之间的主要区别似乎是身份验证 在阅读了论坛上的许多帖子后,我发现: $accountKey = '#########'; $api = 'https://api.datamarket.azure.com/Bing/Search/Web?$format=json&$top=8&Query='; $context = stream_context_create(array(
$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”
有人知道我怎么解决这个问题吗。我也试过卷发,但不起作用。
感谢所有能为我找到解决方案的人。我想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);
我遇到了与将网站部署到新服务器时相同的问题。我想我的托管公司禁用了一些功能,包括文件内容到外部链接
$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时适用于我。这里是搜索API的工作示例,只需将您的访问密钥替换为“XXXX”。甚至我也浪费了好几个小时来使用cURL让它工作,但它失败了,因为在本地上出现了“CURLOPT_SSL_VERIFYPEER”:(
我遇到了同样的问题,现在已修复,根url已更改,现在类似于:
$top=50&$format=JSON">您是否对$q变量进行了urlencode?Microsoft无法提供洞察?@Sandrino Di Mattia我尝试了urlencode,但没有任何帮助。我从Microsoft迁移指南中获得了上述代码:www.bing.com/webmaster/content/developers/ADM_Migration_Guide.docx我在StackOverflow的另一篇文章中找到了相同的代码,但两篇文章似乎都给出了正确的答案同样的错误你找到一个有效的解决方案了吗?遗憾的是,该代码也不起作用-仍然给出同样的错误。我想知道这是否与我的服务器有关,但我不这么认为。有趣的是。也许有一个代理在某种程度上干扰了我的工作?除了顶部缺少的
$accountKey=…
行之外,该代码是无效的rbatim我刚刚成功运行的内容。是否可能您的帐户密钥错误?请仔细检查一下?您可能是对的。似乎当我通过浏览器运行页面时,我可以在密码槽中键入帐户密钥,它可以轻松返回JSON结果。只有当我使用授权通过PHP请求API时,它才会失败。我怀疑我检查了我的帐户密钥,当我通过浏览器使用API时,它就可以工作了。多亏了你的CURL代码,我才能够解决这个问题。谢谢。
$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);