如何使用VBA发送带请求体的GET请求?
问题解答
为什么GET请求的请求体被忽略?
- HTTP标准规范中,GET请求的设计初衷是用于获取资源,通常不应该携带请求体,大部分HTTP客户端(包括你使用的
Msxml2.XMLHTTP)都会遵循这个规范,自动忽略GET请求中传入的请求体内容。 Msxml2.XMLHTTP组件的实现逻辑明确:当请求方法为GET时,send方法的参数会被直接丢弃,不会将其作为请求体发送。
如何用VBA发送带请求体的GET请求?
如果目标API明确要求GET请求携带JSON请求体,可以换用WinHttp.WinHttpRequest.5.1组件,它支持在GET请求中发送请求体。示例代码如下:
Dim strJSONText As String, strURL As String strURL = "https://<domain>/<some>/<path>" ' 注意JSON规范要求使用双引号,修正格式避免解析错误 strJSONText = "{""<parameter>"":""<value>""}" Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1") objWinHttp.Open "GET", strURL, False objWinHttp.SetRequestHeader "Accept", "application/json" objWinHttp.SetRequestHeader "Content-Type", "application/json" ' WinHttpRequest支持GET请求发送请求体 objWinHttp.Send strJSONText ' 可在此处理响应内容 ' Debug.Print objWinHttp.ResponseText
注意事项
- 这种GET请求带请求体的做法不符合HTTP标准规范,可能在部分代理服务器或其他客户端中出现兼容性问题,建议优先和API提供者确认是否可以改用POST请求传递参数。
- 务必保证JSON格式正确,必须用双引号包裹键名和字符串类型的值,否则可能导致API解析失败。
内容的提问来源于stack exchange,提问作者arjan
相关产品推荐
相关产品推荐

