从Excel电子表格执行HTTP POST需要什么VBA代码?如何使用VBA从Excel发送HTTP POST请求到服务器?
回答
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("")
另外,超过您可以代替MSXML2.ServerXMLHTTP
使用WinHttp.WinHttpRequest.5.1
HTTP请求更大的控制权。
通过添加对MSXML的引用,您可以在VBA项目中使用ServerXMLHTTP。
- 打开VBA编辑器(通常通过编辑宏)
- 转到可用引用列表
- 选中Microsoft XML
- 单击确定。
(从Referencing MSXML within VBA Projects)
的ServerXMLHTTP MSDN documentation具有所有属性和ServerXMLHTTP的方法的全部细节。
总之,虽然,它的工作原理基本上是这样的:
- 呼叫open方法连接到远程服务器
- 呼叫send发送请求。
- 读通过responseXML,responseText,responseStream或responseBody
该链接使用jscript,而不是VBA – 2016-08-19 04:16:24
谢谢@JohnHenckel。我做出了一些更改,以使这个答案保持最新。 – 2016-08-19 11:39:52
我这样做是使用MSXML库,然后使用XMLHttpRequest对象之前的响应。见http://scriptorium.serve-it.nl/view.php?sid=40
如果你需要它同时支持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函数的参数。
- 这不适用于Mac 2008的Excel,它不具有VBA。 Excel for Mac 2011让VBA回归。
有关更多详细信息,请参阅“using web services from Excel”的完整摘要。
除了对Bill the Lizard的anwser:
大多数后端的解析原始post数据。例如,在PHP中,您将有一个数组$ _POST,其中存储发布数据中的各个变量。在这种情况下,你必须使用一个额外的头“内容类型:应用程序/ x-WWW的形式,进行了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”原始post数据。
- 1. 使用HTTP从Excel发送数据到服务器Post
- 2. 如何使用HTTParty(Net :: HTTP)向服务器发送文件发送POST请求
- 3. 发送http请求到linux服务器
- 4. 查看HTTP POST请求发送到本地服务器
- 5. 使用请求发送ByteArray的Web服务使用HTTP POST
- 6. 如何通过http请求发送文件到http服务器
- 7. 从Excel发送POST请求到WebService
- 8. C http服务器发送请求到我的服务器?
- 9. EmberJS使用ember-ajax发送HTTP Post请求到Rails API服务器
- 10. 验证服务器发送HTTP请求
- 11. 发送POST请求后身体不发送到服务器
- 12. 使用JSON发送HTTP请求到PHP web服务器,在ANDROID
- 13. 请求到Web服务(POST)
- 14. 向服务器发送HTTP POST请求并获得响应?
- 15. 如何发送HTTP请求到服务器瓶中
- 16. 发送HTTP POST请求使用PHP
- 17. 发送来自节点的HTTP Post请求到Foxx服务(ArangoDB)
- 18. 发送HTTP POST请求
- 19. Wit.ai POST /发送HTTP请求
- 20. JAVA发送POST http请求
- 21. 将请求从https发送到本地http服务器
- 22. HTTP POST请求 - 将用户名和密码发送到服务器
- 23. 发送数据从Javafx发送到HTTP POST请求
- 24. POST请求到达服务器,但空
- 25. 从服务器端发出HTTP请求
- 26. Excel VBA循环发送请求到Api
- 27. 使用Express.js在服务器上发送POST请求
- 28. REST web服务 - 使用JSP从XML发送post请求
- 29. 服务器端HTTP POST请求进度
- 30. 使用appcelerator向本地服务器发送http请求
为了更好地控制HTTP请求,您可以使用“WinHttp.WinHttpRequest.5.1”而不是“MSXML2.ServerXMLHTTP” – 2008-10-03 10:23:43
值得注意的是,您也可以通过将“POST”更改为“PUT”来使用它来发出HTTP PUT。内容到PUT进入.send()方法。您还需要按照User-Agent示例中使用的语法完成您需要设置的任何其他标头。 – radicand 2012-01-24 04:47:52