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

VBA HTTP Post请求因SetRequestHeader与数据格式报错求助

问题分析

你的错误根源在于请求体格式不符合服务端要求,且缺少必要的请求头:

  • 服务端期望接收JSON格式的请求体,但你发送的是逗号分隔的普通字符串(如1, AP12345, ArcticPuma, 0.0.1),服务端无法将这种格式解析为ToolsLog对象。
  • 没有设置Content-Type请求头,服务端无法正确识别请求体的格式,默认按JSON解析时自然会触发语法错误。
解决方案
  1. 将请求体改为符合JSON语法的字符串,键值对对应ToolsLog模型的字段
  2. 添加Content-Type: application/json请求头,明确告诉服务端请求体是JSON格式
修改后的代码
Sub LogData()
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    url = "company server"

    ' 构建符合JSON格式的请求体
    Dim sUsageData As String
    sUsageData = "{""appExecuted"":1, ""MachineName"":""AP12345"", ""UserName"":""ArcticPuma"", ""Version"":""0.0.1""}"
        
    objHTTP.Open "POST", url, False
    ' 保留原有的API密钥请求头
    objHTTP.setRequestHeader "x-functions-key", "OvrArPWivmrU5RytrJLmZxuk_9xSr2WE16uM5QoGkS0ZAzFudJJhdw=="
    ' 关键:设置Content-Type,明确请求体格式为JSON
    objHTTP.setRequestHeader "Content-Type", "application/json"
    objHTTP.send sUsageData

    ' 可选:打印响应信息用于调试
    Debug.Print "响应状态: " & objHTTP.Status
    Debug.Print "响应内容: " & objHTTP.responseText

    Set objHTTP = Nothing
End Sub
额外说明
  • 如果UsageData类有更多字段,只需按JSON语法扩展字符串即可:字符串类型值用双引号包裹,数字类型无需双引号。
  • 若担心手动拼接JSON出错,可借助VBA的Scripting.Dictionary配合JSON转换工具,但简单结构下手动拼接足够高效。

内容的提问来源于stack exchange,提问作者ArcticPuma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 05:43:10