使用py-ms-cognitive调用必应搜索遇401错误,求正确API指引
Troubleshooting 401 Access Denied Error with py-ms-cognitive & Bing Image Search API in Azure
我完全懂你碰到这个401错误的崩溃感——毕竟已经试过换密钥、核对区域、新建项目这些操作了,结果还是被拒,太闹心了。咱们一步步拆解问题,大概率是服务类型匹配或者端点配置的问题:
1. 先搞清楚:你用的模块对应必应图片搜索API,不是网页搜索!
你代码里用的是PyMsCognitiveImageSearch,这个模块专门调用的是Azure里的必应图片搜索服务,而不是网页搜索API。这俩服务的密钥是不通用的——如果之前拿网页搜索的密钥来用,肯定会报401。
解决办法:
- 登录Azure门户,找到你的认知服务资源,要是之前建的是网页搜索,就新建一个必应图片搜索的资源(搜索“必应图片搜索”就能找到)。
- 新建完成后,在资源的“密钥和端点”页面,复制其中一个密钥,这才是你要用到的正确密钥。
2. 核对端点区域,别用默认值
py-ms-cognitive的默认端点可能和你Azure资源的区域不匹配,这也会导致权限验证失败。比如你选的是西欧区域,端点就得是https://westeurope.api.cognitive.microsoft.com/bing/v7.0/images/search,而不是全球通用的端点。
修改代码,手动指定对应区域的端点:
from py_ms_cognitive import PyMsCognitiveImageSearch search_term = "puppies" # 替换成你的必应图片搜索密钥和区域端点 search_service = PyMsCognitiveImageSearch('YOUR_IMAGE_SEARCH_KEY', search_term, custom_url='https://YOUR_REGION.api.cognitive.microsoft.com/bing/v7.0/images/search') first_fifty_result = search_service.search(limit=50, format='json')
3. 别把订阅ID当成API密钥用
你提到试过用订阅ID,这是误区!Azure的订阅ID是用来管理账户资源的,不能直接用来调用认知服务API——必须用对应服务的“密钥”(在资源的“密钥和端点”里的那两个字符串)。
4. 测试API是否正常(绕开第三方包)
如果上面的步骤都试过还是不行,建议用requests库直接调用API,排除第三方包的问题:
import requests headers = { 'Ocp-Apim-Subscription-Key': 'YOUR_IMAGE_SEARCH_KEY', } params = { 'q': 'puppies', 'count': 50, } # 替换成你的区域端点 response = requests.get('https://YOUR_REGION.api.cognitive.microsoft.com/bing/v7.0/images/search', headers=headers, params=params) print(response.status_code) print(response.json())
如果这个请求返回200和正常的图片数据,说明问题出在py-ms-cognitive包上——可以尝试升级包到最新版本:
pip install --upgrade py-ms-cognitive
要是手动调用也返回401,那就要检查你的Azure资源是否处于活跃状态(有没有欠费),或者配额是否用完了(在资源的“使用情况和配额”页面查看)。
内容的提问来源于stack exchange,提问作者Sebastian Goslin
相关产品推荐
相关产品推荐

