从Excel电子表格执行HTTP POST请求需要哪些VBA代码?
从Excel电子表格执行HTTP POST请求需要哪些VBA代码?
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ""
或者,为了更好地控制HTTP请求,您可以使用 WinHttp.WinHttpRequest.5.1
替代 MSXML2.ServerXMLHTTP
。
除了Bill the Lizard的答案之外:
大多数后端都会解析原始的POST数据。例如,在PHP中,您将拥有一个名为$_POST
的数组,其中将存储在POST数据中的各个变量。在这种情况下,您必须使用额外的标题"Content-type: application/x-www-form-urlencoded"
:
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send "var1=value1&var2=value2&var3=value3"
否则,您必须读取变量"$HTTP_RAW_POST_DATA"
上的原始帖子数据。如果需要它在Mac和Windows上都能工作,你可以使用QueryTables:
With ActiveSheet.QueryTables.Add(Connection:="URL;http://carbon.brighterplanet.com/flights.txt", Destination:=Range("A2"))
.PostText = "origin_airport=MSN&destination_airport=ORD"
.RefreshStyle = xlOverwriteCells
.SaveData = True
.Refresh
End With
注意:
欲了解更多详情,您可以查看我的有关“从Excel使用Web服务”的完整总结。
为了完成其他用户的回应,我创建了一个名为"WinHttp.WinHttpRequest.5.1"的对象。
使用VBA从Excel发送带有一些数据的POST请求:
Dim LoginRequest As Object
Set LoginRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
LoginRequest.Open "POST", "http://...", False
LoginRequest.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
LoginRequest.send ("key1=value1&key2=value2")
使用VBA从Excel发送具有令牌身份验证的GET请求:
Dim TCRequestItem As Object
Set TCRequestItem = CreateObject("WinHttp.WinHttpRequest.5.1")
TCRequestItem.Open "GET", "http://...", False
TCRequestItem.setRequestHeader "Content-Type", "application/xml"
TCRequestItem.setRequestHeader "Accept", "application/xml"
TCRequestItem.setRequestHeader "Authorization", "Bearer " & token
TCRequestItem.send
TCRequestItem
对象内部,您可以通过执行 TCRequestItem.send
后读取 TCRequestItem.ResponseText
来获取它。 - dvqueServerXMLHTTP
。有关ServerXMLHTTP的所有属性和方法的详细信息,请参阅ServerXMLHTTP MSDN文档。
- 打开VBA编辑器(通常通过编辑宏来实现)
- 转到“可用引用”列表
- 勾选 Microsoft XML
- 单击确定。
(引自在VBA项目中引用MSXML)
- 调用open方法连接到远程服务器
- 调用send方法发送请求。
- 通过responseXML、responseText、responseStream或responseBody读取响应。