如何让Bing搜索API返回相关搜索?解决403禁止访问错误
解决Bing搜索API 403 Forbidden错误(获取相关搜索结果)
我来帮你排查这个问题,你遇到的403错误主要是URL参数拼接的问题,咱们一步步解决:
问题根源:URL中的转义字符错误
你在拼接请求URL时使用了&,这是HTML转义字符,而HTTP请求的URL里需要直接用&来分隔参数。服务器会把&当成参数名的一部分,导致请求格式不合法,最终触发403 Forbidden错误。
修复方案
方案1:直接修正参数分隔符
把URL拼接中的&替换成&即可:
$result = file_get_contents($url . "?q=" . urlencode($query) . "&responseFilter=RelatedSearches", false, $context);
方案2:使用http_build_query构建参数(更推荐)
手动拼接URL容易出错,用PHP内置的http_build_query可以自动处理参数分隔符和编码,更规范安全:
function BingWebSearch ($url, $key, $query) { $headers = "Ocp-Apim-Subscription-Key: $key\r\n"; $options = array ('http' => array ( 'header' => $headers, 'method' => 'GET')); $context = stream_context_create($options); // 用http_build_query构建参数,自动处理编码和分隔符 $params = [ 'q' => $query, 'responseFilter' => 'RelatedSearches' ]; $fullUrl = $url . '?' . http_build_query($params); $result = file_get_contents($fullUrl, false, $context); $headers = array(); foreach ($http_response_header as $k => $v) { $h = explode(":", $v, 2); if (isset($h[1])) if (preg_match("/^BingAPIs-/", $h[0]) || preg_match("/^X-MSEdge-/", $h[0])) $headers[trim($h[0])] = trim($h[1]); } return array($headers, $result); }
额外检查项
如果修改后还是出现403,请确认:
- 你的
accessKey是有效的32位Bing搜索API密钥,没有过期或权限限制 - 你的请求IP在API允许的访问范围内(如果设置了IP白名单)
修改后重新运行代码,应该就能正常获取相关搜索结果的响应了。
内容的提问来源于stack exchange,提问作者Wonko the Sane
相关产品推荐
相关产品推荐

