如何使用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。

  1. 打开VBA编辑器(通常是编辑一个macros)
  2. 转到可用引用列表
  3. 检查Microsoft XML
  4. 点击OK。

(从VBA项目中引用MSXML )

ServerXMLHTTP MSDN文档包含有关ServerXMLHTTP的所有属性和方法的完整详细信息。

总之,它基本上是这样的:

  1. 调用open方法连接到远程服务器
  2. 呼叫发送发送请求。
  3. 通过responseXML , responseText , responseStream或responseBody读取响应

我之前使用MSXML库,然后使用XMLHttpRequest对象。 请参阅http://scriptorium.serve-it.nl/view.php?sid=40