从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.
关于输入...如果要在更改某些单元格时刷新结果,请确保这些单元格是VBA函数的参数.
这不适用于没有VBA的Excel for Mac 2008.Excel for Mac 2011得到了VBA.
有关更多详细信息,您可以查看有关" 使用Excel中的Web服务 "的完整摘要.
除了比尔蜥蜴的anwser :
大多数后端解析原始发布数据.例如,在PHP中,您将拥有一个数组$ _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"上的原始发布数据.
您可以通过添加对MSXML的引用在VBA项目中使用ServerXMLHTTP.
打开VBA编辑器(通常通过编辑宏)
转到可用参考列表
检查Microsoft XML
单击确定.
(来自VBA项目中的引用MSXML)
该ServerXMLHTTP的MSDN文档有大约所有属性和ServerXMLHTTP的方法的全部细节.
简而言之,它的工作基本上是这样的:
调用open方法连接到远程服务器
呼叫发送以发送请求.
通过responseXML,responseText,responseStream或responseBody读取响应