從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