VBA HTTP Post请求因SetRequestHeader与数据格式报错求助
问题分析
你的错误根源在于请求体格式不符合服务端要求,且缺少必要的请求头:
- 服务端期望接收JSON格式的请求体,但你发送的是逗号分隔的普通字符串(如
1, AP12345, ArcticPuma, 0.0.1),服务端无法将这种格式解析为ToolsLog对象。 - 没有设置
Content-Type请求头,服务端无法正确识别请求体的格式,默认按JSON解析时自然会触发语法错误。
解决方案
- 将请求体改为符合JSON语法的字符串,键值对对应
ToolsLog模型的字段 - 添加
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
相关产品推荐
相关产品推荐

