VBA发送HTTP请求调用iAuditor接口时如何传递curl的-d过滤参数
VBA实现按template_id过滤拉取iAuditor Actions列表
你原代码返回全量数据的原因是POST请求没有携带过滤用的请求体,直接把curl示例中-d对应的JSON内容按VBA语法转义后,传入.Send方法即可,不需要额外安装JSON依赖库。
完整可运行代码
Sub Get_Filtered_Actions() Dim hReq As Object Dim sht As Worksheet Dim authKey As String Dim response As String Dim requestBody As String Dim targetTemplateId As String ' 配置参数 authKey = "d8a0df7d7e1XXXXXXXXXXXXXXXXXXXXXXXXff3c765cf2fcf" ' 替换为你的实际API密钥 targetTemplateId = "fc2e53f6-4712-4ca5-b681-aba3ac954217" ' 替换为你要过滤的目标模板ID Set sht = Sheets(1) ' 构造JSON请求体:VBA字符串内的双引号需要用两个连续双引号转义 requestBody = "{""template_id"":{""operator"":7,""value"":[""" & targetTemplateId & """]}}" Dim strUrl As String strUrl = "https://api.safetyculture.io/tasks/v1/actions/list" Set hReq = CreateObject("MSXML2.XMLHTTP") With hReq .Open "POST", strUrl, False .SetRequestHeader "Authorization", "Bearer " & authKey .SetRequestHeader "Content-Type", "application/json" .Send requestBody ' 传入构造好的过滤参数 End With ' 输出返回结果 response = hReq.ResponseText sht.Range("A1") = response End Sub
关键注意点
- VBA字符串语法要求:字符串内部的双引号必须写两个连续双引号做转义,否则会报语法错误,拼接完成的JSON结构和curl示例里的-d参数内容完全一致
- 多模板过滤场景:如果需要匹配多个模板ID,直接修改value数组内容即可,示例格式:
"value":["模板ID1","模板ID2"] - operator字段值固定填7即可,对应接口规则里的「包含」匹配逻辑
- 调试时可以在.Send前加
Debug.Print requestBody或者MsgBox requestBody,检查拼接出来的JSON格式是否合法,排除格式错误导致的接口报错
扩展提示:如果需要加其他过滤条件、分页参数(比如page_size、page_token),直接按照相同的键值对规则拼接到requestBody字符串里即可,写法和template_id参数完全一致。
内容的提问来源于stack exchange,提问作者Legomanfr
相关产品推荐
相关产品推荐

