调用Bing API加载搜索结果时遇“no host given”错误求助
解决Bing API报错「no host given」的问题
嘿,我看到你在调用Bing搜索API时碰到了「Bing API error: no host given」的错误,咱们先从最明显的问题入手解决:
1. 修正API基础URL的拼写错误
你代码里的root_url存在两处低级拼写错误,这正是导致「no host given」的核心原因:
- 错误写法:
"https:a//pi.cognitive.microsoft.com/bing/v7.0/search" - 正确写法:
"https://api.cognitive.microsoft.com/bing/v7.0/search"
错误点拆解:
- 多了一个多余的
a:https:a//→ 应该是标准的https:// - 域名拼写错误:
pi→ 正确的是api
2. 确保请求头包含认证密钥
除了URL问题,还要确认你在请求中正确添加了Bing API要求的认证头。Bing Search API v7需要在请求头里带上Ocp-Apim-Subscription-Key,值就是你的API密钥。
这里给你补全修正后的代码片段:
import json import urllib.request, urllib.parse, urllib.error def run_query(search_terms): # 修正后的API基础URL root_url = "https://api.cognitive.microsoft.com/bing/v7.0/search" source = 'Web' # 构造请求参数 params = urllib.parse.urlencode({ 'q': search_terms, 'count': 10, # 可根据需求调整返回结果数量 'offset': 0, 'mkt': 'en-US', # 可根据需求调整市场区域 'safeSearch': 'Moderate' }) # 构造请求对象,添加认证头 request = urllib.request.Request(f"{root_url}?{params}") # 替换成你的API密钥 request.add_header('Ocp-Apim-Subscription-Key', '#api key here') try: # 发送请求并解析响应 response = urllib.request.urlopen(request) results = json.loads(response.read().decode('utf-8')) return results except urllib.error.URLError as e: print(f"请求出错: {e}") return None
3. 额外检查点
- 确认你的API密钥是有效的,没有过期或权限限制
- 如果使用的是Azure上的Bing资源,确认资源的端点域名是否和代码中的一致(有些区域的端点可能略有不同)
内容的提问来源于stack exchange,提问作者Umar Khan
相关产品推荐
相关产品推荐

