调用Vuforia API获取市场列表时遭遇400错误请求求助
排查Vuforia API GET请求400 Bad Request(请求头方向)
既然你已经确认签名没问题,那咱们从请求头的细节和配套要求入手排查,以下是几个容易踩的坑:
1. 严格校验Authorization头格式
Vuforia对这个头的格式要求非常苛刻,别小看这些细节:
VWS后面只能跟一个空格,冒号前后绝对不能加空格,正确格式是VWS {provision_access_key}:{Signature}- 确认用对了密钥:获取市场列表需要的是Provision Access Key,不是Server Access Key,很多人会在这里搞混
2. 不能缺少的配套请求头
Vuforia的GET请求不是只带Authorization就行,这两个头必须加上:
Date:必须是符合RFC 1123标准的时间字符串(比如Tue, 15 Nov 1994 08:12:31 GMT),而且要和你生成签名时用的时间完全一致,差一秒都不行Content-Type:虽然是GET请求,但部分场景下必须指定为application/json,建议直接加上试试
3. 代码层面的常见错误(结合典型写法)
假设你用Python的requests库,类似这样的代码:
import requests import hmac import hashlib from datetime import datetime provision_key = "你的Provision密钥" secret_key = "你的Provision密钥对应的Secret" url = "https://vws.vuforia.com/v1/markets" # 生成符合要求的时间字符串 date_str = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT') # 生成签名(注意这里用的是Provision的Secret) signature = hmac.new(secret_key.encode(), date_str.encode(), hashlib.sha1).hexdigest() headers = { "Authorization": f"VWS {provision_key}:{signature}", "Date": date_str, "Content-Type": "application/json" } response = requests.get(url, headers=headers) print(response.status_code, response.text)
重点检查:
Date的格式:星期和月份必须是英文缩写(比如Tue、Nov),时区必须是GMT,别用本地时区或者其他格式- 签名用的时间和请求头里的
Date必须是同一个字符串,生成签名后别再修改时间 - 如果是其他语言(比如Java/JS),注意日期格式化工具的Locale设置,比如Java要指定
Locale.US,避免生成中文的星期或月份
4. 最后确认URL路径
获取所有市场的正确URL是https://vws.vuforia.com/v1/markets,别写错路径(比如多了/少了v1,或者把markets拼错)
如果以上都排查完还是有问题,建议把你的完整请求头(敏感信息打码)和代码片段贴出来,这样能更精准定位问题~
内容的提问来源于stack exchange,提问作者alexisdle
相关产品推荐
相关产品推荐

