Mã VBA nào được yêu cầu để thực hiện một POST HTTP từ bảng tính Excel?Làm cách nào để gửi yêu cầu HTTP POST tới máy chủ từ Excel bằng VBA?
Trả lời
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("")
Ngoài ra, để kiểm soát tốt hơn các yêu cầu HTTP, bạn có thể sử dụng WinHttp.WinHttpRequest.5.1
ở vị trí của MSXML2.ServerXMLHTTP
.
Bạn có thể sử dụng ServerXMLHTTP trong dự án VBA bằng cách thêm tham chiếu vào MSXML.
- Mở VBA Editor (thường bằng cách chỉnh sửa một Macro)
- Go vào danh sách các tài liệu tham khảo sẵn
- Kiểm tra Microsoft XML
- Bấm OK.
(từ Referencing MSXML within VBA Projects)
Các ServerXMLHTTP MSDN documentation có đầy đủ chi tiết về tất cả các thuộc tính và phương pháp ServerXMLHTTP.
Nói tóm lại, mặc dù nó hoạt động cơ bản như thế này:
- Gọi open phương pháp để kết nối với máy chủ từ xa
- Gọi send để gửi yêu cầu.
- Đọc câu trả lời qua responseXML, responseText, responseStream hoặc responseBody
liên kết đó sử dụng jscript, chứ không phải VBA –
Cảm ơn @JohnHenckel. Tôi đã thực hiện một số thay đổi để đưa câu trả lời đó được cập nhật. –
Tôi đã làm điều này trước khi sử dụng thư viện MSXML và sau đó sử dụng đối tượng XMLHttpRequest. Xem http://scriptorium.serve-it.nl/view.php?sid=40
QueryTables Nếu bạn cần nó để làm việc trên cả Mac và Windows, bạn có thể sử dụng:
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
Ghi chú:
- Về đầu ra ... Tôi không biết nếu nó có thể trả về kết quả cho cùng một ô được gọi là hàm VBA. Trong ví dụ trên, kết quả được viết thành A2.
- Về đầu vào ... Nếu bạn muốn kết quả làm mới khi bạn thay đổi một số ô nhất định, hãy đảm bảo các ô đó là đối số cho hàm VBA của bạn.
- Điều này sẽ không hoạt động trên Excel cho Mac 2008, không có VBA. Excel cho Mac 2011 đã VBA trở lại.
Để biết thêm chi tiết, bạn có thể xem tóm tắt đầy đủ của tôi về "using web services from Excel".
+1: Tôi chỉ cần nó trên Windows nhưng một giải pháp đa nền tảng có thể có lợi cho người khác. –
Tôi không nghĩ rằng bạn thực sự có thể truy cập vào mã html, bạn chỉ có thể nhận được thông tin trên trang web được hiển thị (không phải mã html thực tế) – user1493046
+1 cho giải pháp đa nền tảng và +1 (nếu có thể) cho bản tóm tắt đầy đủ với liên kết gist và tất cả. Cảm ơn!! –
Ngoài các anwser của Bill the Lizard:
Hầu hết các phần phụ trợ phân tích các bài dữ liệu thô. Trong PHP ví dụ, bạn sẽ có một mảng $ _POST trong đó các biến riêng lẻ trong dữ liệu bài đăng sẽ được lưu trữ.Trong trường hợp này bạn phải sử dụng thêm một header "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")
Nếu không, bạn phải đọc bài dữ liệu thô trên biến "$ HTTP_RAW_POST_DATA".
Tôi đang cố đăng yêu cầu này (với dấu ngoặc nhọn) và nhận các lỗi biên dịch ... bạn có thể yêu cầu: "{" request ": {" carName ":" Honda "," model ":" 1A5 "}}" – fiddle
- 1. Cách gửi yêu cầu tới yêu cầu HTTP POST tới máy chủ
- 2. Cách gửi yêu cầu HTTP POST bằng nội dung gzip?
- 3. Làm cách nào để gửi JSon dưới dạng BODY Trong yêu cầu POST tới máy chủ từ ứng dụng Android?
- 4. Yêu cầu POST HTTPS bằng cách sử dụng VBA cho Excel
- 5. Android HttpClient gửi yêu cầu tới máy chủ qua USB
- 6. Cách gửi yêu cầu HTTP POST và nhận phản hồi?
- 7. Gửi yêu cầu POST bằng netcat
- 8. Cách gửi yêu cầu POST?
- 9. Máy khách Netty, cách nhận phản hồi từ yêu cầu được gửi tới máy chủ
- 10. Gửi yêu cầu HTTP POST trong iOS với JSON
- 11. Gửi yêu cầu POST qua HTTP bằng cách sử dụng Safari trên máy Mac
- 12. Làm thế nào để gửi yêu cầu HTTP trong java?
- 13. Gửi yêu cầu đăng bằng lưới/http
- 14. Làm cách nào để gửi yêu cầu POST trong RestSharp?
- 15. Sử dụng Charles Proxy để định tuyến yêu cầu https tới máy chủ http địa phương
- 16. Cách gửi Yêu cầu POST HTTP trong Delphi bằng cách sử dụng WinInet api
- 17. Gửi yêu cầu gửi tới WCF RESTful với json
- 18. xóa dòng mới khi gửi yêu cầu đến máy chủ qua Ajax Post với JQuery
- 19. Tệp POST của Node.js tới Máy chủ
- 20. Sử dụng Ruby để gửi yêu cầu XML tới máy chủ web
- 21. Gửi hình ảnh bằng cách sử dụng Http Post
- 22. Nhận địa chỉ IP từ yêu cầu HTTP POST bằng cách sử dụng Python
- 23. Gửi yêu cầu ứng dụng từ phía máy chủ
- 24. Làm cách nào để phát hành HTTP GET từ Excel VBA cho Mac 2011
- 25. Cách chuyển thông số POST tới yêu cầu web ASP.Net?
- 26. Làm cách nào để bắt chước gửi biểu mẫu HTML trong yêu cầu POST?
- 27. Nhận Yêu cầu POST trên Máy chủ (Spring Framework) từ Ứng dụng Android
- 28. Ruby: Làm cách nào để gửi yêu cầu POST JSON bằng Curb?
- 29. Làm cách nào để chuyển hướng https: // yêu cầu tới http: // bằng NGINX?
- 30. Symfony2: gửi yêu cầu HTTP
Để kiểm soát tốt hơn yêu cầu HTTP, bạn có thể sử dụng "WinHttp.WinHttpRequest.5.1" thay vì "MSXML2.ServerXMLHTTP" –
Đáng chú ý là bạn cũng có thể sử dụng điều này để phát hành HTTP PUT bằng cách thay đổi "POST" thành "PUT". Nội dung để PUT đi theo phương thức .send(). Bất kỳ tiêu đề bổ sung nào bạn cần đặt cũng có thể được thực hiện theo cú pháp được sử dụng trong ví dụ User-Agent. – radicand
Vui lòng không sử dụng dấu ngoặc đơn xung quanh các tham số nếu bạn không sử dụng giá trị trả về của Phụ: VBA Cú pháp không cho phép dấu ngoặc ôm xung quanh tham số của Phụ (mặc dù chúng cần cho Hàm), vì vậy các dấu ngoặc đơn này thực sự được sử dụng để làm rõ toán tử ưu tiên . Ngoài việc gây hiểu lầm và không rõ ràng, điều này cuối cùng có thể dẫn đến lỗi thời gian chạy nếu đối số là một đối tượng. Và mặc dù không được yêu cầu một cách rõ ràng, thông thường bạn sẽ muốn sử dụng phản hồi HTTP, mà bạn có thể đề cập đến có thể được truy xuất bởi 'objHTTP.responseText'. – Leviathan