如何将Postman导出的curl代码转换为VBA实现POST请求?
将Curl转换为VBA POST请求(解决请求体字符串问题)
核心问题是VBA中字符串的双引号需要转义(用两个连续双引号代替单个双引号),否则会导致JSON格式解析错误。以下是完整的转换代码:
Sub SendPOSTRequest() Dim objHTTP As Object Dim requestBody As String Dim apiUrl As String ' 初始化HTTP对象(后期绑定,无需额外引用) Set objHTTP = CreateObject("MSXML2.XMLHTTP.6.0") ' API地址 apiUrl = "https://api.web.com" ' 构造请求体:将JSON中的每个双引号替换为两个双引号,确保VBA正确识别 requestBody = "{" & vbCrLf & _ " ""payload"": {" & vbCrLf & _ " ""legs"": [" & vbCrLf & _ " {" & vbCrLf & _ " ""sideInd"": ""BUY""," & vbCrLf & _ " ""strategyRatio"": 1," & vbCrLf & _ " ""symbol"": ""EW4Q2 P4120""" & vbCrLf & _ " }," & vbCrLf & _ " {" & vbCrLf & _ " ""sideInd"": ""BUY""," & vbCrLf & _ " ""strategyRatio"": 1," & vbCrLf & _ " ""symbol"": ""EW4Q2 C4160""" & vbCrLf & _ " }" & vbCrLf & _ " ]" & vbCrLf & _ " }" & vbCrLf & _ "}" ' 打开POST请求 objHTTP.Open "POST", apiUrl, False ' 设置请求头,完全对应原Curl中的header objHTTP.setRequestHeader "Accept", "application/json" objHTTP.setRequestHeader "Content-Type", "application/json" objHTTP.setRequestHeader "CME-Application-Version", "CSET" objHTTP.setRequestHeader "CME-Application-Vendor", "CCC" objHTTP.setRequestHeader "CME-Application-Name", "DDD" objHTTP.setRequestHeader "CME-Request-ID", "20190722" objHTTP.setRequestHeader "CME-Transact-Time", "23-AUG-2022 09:30" objHTTP.setRequestHeader "Authorization", "Basic AAA" ' 发送请求 objHTTP.Send requestBody ' 处理响应(示例:弹窗显示响应内容) If objHTTP.Status = 200 Then MsgBox "请求成功:" & vbCrLf & objHTTP.responseText Else MsgBox "请求失败,状态码:" & objHTTP.Status & vbCrLf & objHTTP.responseText End If ' 释放对象 Set objHTTP = Nothing End Sub
关键说明:
- 双引号转义:VBA中字符串内部的双引号必须用两个连续双引号(
"")表示,否则会被当作字符串的结束标记,导致JSON结构断裂。 - HTTP对象选择:使用
MSXML2.XMLHTTP.6.0是因为它支持TLS 1.2等现代安全协议,避免旧版本的兼容性问题。 - 请求头完整复制:确保所有原Curl中的请求头都通过
setRequestHeader方法添加,包括自定义的CME-开头的头。 - 同步请求:示例中使用同步请求(第三个参数为
False),适合简单场景;若需要异步处理,可改为True并绑定事件。
内容的提问来源于stack exchange,提问作者Michael Bromiley
相关产品推荐
相关产品推荐

