VBA HTTP POST无法工作

12

我正在尝试通过VBA发送HTTP POST请求。以下是我的代码:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open "POST", url, False
objHTTP.setRequestHeader "User-Agent", "EPS 1.0"
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.setRequestHeader "content", postString
objHTTP.setRequestHeader "Content-Length", Len(postString)
objHTTP.send

问题在于,只有当postString少于65535个字符时,代码才能正常工作。如果超过65535个字符,它会在以下行上抛出错误:

错误:参数不正确

objHTTP.setRequestHeader "content", postString

有关此问题,您有什么想法吗?我需要设置其他参数才能使其正常工作吗?


如果您通过 send 发送 postString,会发生什么情况?因此,请注释掉 objHTTP.setRequestHeader "content", postString 并修改 objHTTP.send postString - TEK
原因是服务器仅接受通过标头发布的内容。这就是为什么我正在通过标头发送。 - Linga
是的。当我通过PERL和PHP发布它时,它运行良好。 - Linga
将65k作为HTTP Header值传递是非常奇怪的,这远远超出了Apache/IIS请求大小的默认限制 - 你确定postString不是指post string吗?也就是请求body的内容,而不是头部? - Alex K.
http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4 - Maciej Los
显示剩余16条评论
1个回答

3

参考:https://support.microsoft.com/zh-cn/kb/290591

这样应该就可以了

postString = "id=" & String(66000,"x")
Dim xmlhttp 
Set xmlhttp = Createobject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "POST", url, false
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlhttp.send postString

如果它无法正常工作,那么可能是您的服务器端设置出了问题。


你能解释一下 "id=" & String(66000,"x") 吗? - Linga
那只是一个虚拟数据字符串,用于测试传递:一个名为“id”的参数,其值为66k个字符。 - Tim Williams
同样的问题..服务器没有通过post接收到任何内容。如果它小于65535,我在服务器上看到了post数据。而且,在我用perl和php检查时,也收到了完整的数据。所以显然,这是一个VBA问题。 - Linga
1
如果您使用类似Fiddler的工具监控请求,您会看到什么? - Tim Williams
也许说一些关于你的服务器平台会很有用 - 你在使用什么? - Tim Williams

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