You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:40:50