VBA调用挪威Vegvesen车辆API返回403错误,请求排查鉴权问题
VBA调用挪威Vegvesen车辆API返回403 Forbidden错误排查
无编程经验,尝试用VBA调用挪威Vegvesen官方车辆API获取数据以替代手动更新车辆列表,编写的代码如下:
Sub SendAPIRequest() Dim httpreq As Object Dim url As String Dim response As String Dim headers As Collection Set headers = New Collection headers.Add "SVV-Authorization", "Apikey {1234}" Set httpreq = CreateObject("MSXML2.XMLHTTP") url = "https://www.vegvesen.no/ws/no/vegvesen/kjoretoy/felles/datautlevering/enkeltoppslag/kjoretoydata?kjennemerke=AA91620" + kjennemerke With httpreq .Open "GET", url, False .setRequestHeader "SVV-Authorization", "1234}" .send End With response = httpreq.responseText Debug.Print response End Sub
请求发送后返回403 Forbidden错误,响应信息为:
"status":403,"error":"Forbidden","path":"/enkeltoppslag/kjoretoydata"}
提示“API密钥不存在于数据库、未激活或用户被封禁”,已确认密钥合法有效,怀疑请求头设置错误,需排查解决。
问题排查与修正方案
请求头格式错误
代码中实际发送请求时的SVV-Authorization头格式完全错误:缺少Apikey前缀,还多了一个右大括号。根据API要求,该头的正确格式应为Apikey {你的API密钥}(若API文档要求不带大括号则写Apikey 你的API密钥)。同时你之前定义的headers集合未被使用,属于无效代码。URL拼接错误
VBA中字符串拼接应使用&而非+,且代码中的kjennemerke变量未定义就直接拼接,会导致URL格式异常。若要动态传入车牌,需先定义变量再拼接。HTTP对象版本问题
建议使用MSXML2.XMLHTTP.6.0替代MSXML2.XMLHTTP,避免旧版本带来的兼容性问题。
修正后的完整代码
Sub SendAPIRequest() Dim httpreq As Object Dim url As String Dim response As String Dim kjennemerke As String ' 定义目标车牌,可改为从单元格读取(如Range("A1").Value) kjennemerke = "AA91620" ' 初始化最新版本的HTTP请求对象 Set httpreq = CreateObject("MSXML2.XMLHTTP.6.0") ' 正确拼接请求URL url = "https://www.vegvesen.no/ws/no/vegvesen/kjoretoy/felles/datautlevering/enkeltoppslag/kjoretoydata?kjennemerke=" & kjennemerke With httpreq .Open "GET", url, False ' 按API要求设置授权头,注意密钥格式是否需要大括号 .setRequestHeader "SVV-Authorization", "Apikey {1234}" .send End With response = httpreq.responseText Debug.Print response ' 释放内存中的对象 Set httpreq = Nothing End Sub
内容的提问来源于stack exchange,提问作者Maikel vd Panne
相关产品推荐
相关产品推荐

