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

如何将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

关键说明:

  1. 双引号转义:VBA中字符串内部的双引号必须用两个连续双引号("")表示,否则会被当作字符串的结束标记,导致JSON结构断裂。
  2. HTTP对象选择:使用MSXML2.XMLHTTP.6.0是因为它支持TLS 1.2等现代安全协议,避免旧版本的兼容性问题。
  3. 请求头完整复制:确保所有原Curl中的请求头都通过setRequestHeader方法添加,包括自定义的CME-开头的头。
  4. 同步请求:示例中使用同步请求(第三个参数为False),适合简单场景;若需要异步处理,可改为True并绑定事件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:16:58