将JSON对象作为POST请求发送

4

我正在尝试从Excel中的VBA应用程序发送JSON对象。下面的代码可以正确地发送请求,但是我无法弄清如何在请求正文中使用JSON对象。

Sub Post()

    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    URL = "http://localhost:3000/test"
    objHTTP.Open "POST", URL, False
    objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
    objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
    objHTTP.send "test=6"

End Sub

如果我尝试发送例如"{test:6, test2: 7}"并记录服务器上请求的主体,我会得到{ '{parts:6, test: 7}': '' }
2个回答

8

正如你可能已经知道的那样,JSON结构可能会带来严重的头痛。在你的情况下,我想这都是关于引号的问题,就像你可以在这里看到的那样,如果你尝试验证你的{test:6, test2: 7}

尝试以下代码。在我看来,它看起来是合理的:

    Sub Post()
    
    Dim URL As String, JSONString As String, objHTTP as Object
    
        Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
        URL = "http://localhost:3000/test"
        objHTTP.Open "POST", URL, False
        objHTTP.setRequestHeader "Content-type", "application/json"
        objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
    
        JSONString = "{""test"": 6,""test2"":7}"
    
        objHTTP.Send JSONString
    
    End Sub

1
谢谢!这最终解决了问题。不过在此之前,我必须将内容类型标头更改为application/json,并添加一个内容长度字段以消除400错误。 - mattc19

0

如果有人在POST请求中遇到了问题,即当您在objHTTP.Send行处使用变量而不是文字时,您的正文根本没有被发送,那么这对我很有效。尽管我将变量声明为字符串并且已经苦苦挣扎了数小时。

    objHTTP.Send CStr(YourVariable)

这对我没有用,就像我在其他地方看到的一样:

    objHTTP.Send CStr(YourVariable, vbFromUnicode)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接