如何使用VBA从Excel发送HTTP POST请求到服务器?
从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
。
如果你需要它在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
笔记:
- 关于输出…我不知道是否有可能将结果返回到称为VBA函数的同一个单元格。 在上面的例子中,结果写入A2。
- 关于input…如果希望在更改某些单元格时刷新结果,请确保这些单元格是VBA函数的参数。
- 这不适用于没有VBA的Mac 2008的Excel。 Excel for Mac 2011让VBA回来了。
有关更多详细信息,可以查看关于“ 使用来自Excel的Web服务 ”的完整摘要。
除了蜥蜴的比尔 :
大多数后端parsing原始的发布数据。 在PHP中,例如,您将拥有一个数组$ _POST,其中将存储发布数据中的各个variables。 在这种情况下,你必须使用额外的头文件“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")
否则,您必须读取variables“$ HTTP_RAW_POST_DATA”上的原始数据。
通过添加对MSXML的引用,可以在VBA项目中使用ServerXMLHTTP。
- 打开VBA编辑器(通常是编辑一个macros)
- 转到可用引用列表
- 检查Microsoft XML
- 点击OK。
(从VBA项目中引用MSXML )
ServerXMLHTTP MSDN文档包含有关ServerXMLHTTP的所有属性和方法的完整详细信息。
总之,它基本上是这样的:
- 调用open方法连接到远程服务器
- 呼叫发送发送请求。
- 通过responseXML , responseText , responseStream或responseBody读取响应
我之前使用MSXML库,然后使用XMLHttpRequest对象。 请参阅http://scriptorium.serve-it.nl/view.php?sid=40