Mã VBA nào được yêu cầu để thực hiện POST HTTP từ bảng tính Excel?
Mã VBA nào được yêu cầu để thực hiện POST HTTP từ bảng tính Excel?
Câu 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 yêu cầu HTTP, bạn có thể sử dụng WinHttp.WinHttpRequest.5.1
thay thế MSXML2.ServerXMLHTTP
.
objHTTP.responseText
.
ByRef
hay không. Đó là lý do tại sao việc sử dụng chúng với các biến đối tượng thuộc loại không có thành viên mặc định gây ra lỗi thời gian chạy; và sử dụng chúng trên một đối tượng mà không có thành viên mặc định, qua giá trị mà thành viên mặc định thay vì các đối tượng thực tế.
Nếu bạn cần nó để hoạt động trên cả Mac và Windows, bạn có thể sử dụng 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
Ghi chú:
Để biết thêm chi tiết, bạn có thể xem tóm tắt đầy đủ của tôi về " sử dụng dịch vụ web từ Excel ."
Ngoài anwser của Bill the Lizard :
Hầu hết các phụ trợ phân tích dữ liệu bài thô. Trong PHP chẳng hạn, 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 một tiêu đề bổ sung "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 dữ liệu bài thô trên biến "$HTTP_RAW_POST_DATA"
.
Bạn có thể sử dụng ServerXMLHTTP
trong một dự án VBA bằng cách thêm một tham chiếu đến MSXML
.
- Mở Trình chỉnh sửa VBA (thường bằng cách chỉnh sửa Macro)
- Chuyển đến danh sách các tài liệu tham khảo có sẵn
- Kiểm tra Microsoft XML
- Nhấn OK.
(từ Tham khảo MSXML trong các Dự án VBA )
Các tài liệu ServerXMLHTTP MSDN 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, nó hoạt động cơ bản như thế này:
- Gọi phương thức mở để kết nối với máy chủ từ xa
- Gọi gửi để gửi yêu cầu.
- Đọc phản hồi thông qua answerXML , answerText , answerStream hoặc answerBody
Để hoàn thành phản hồi của những người dùng khác:
Đối với điều này, tôi đã tạo ra một "WinHttp.WinHttpRequest.5.1" đối tượng .
Gửi yêu cầu bài đăng với một số dữ liệu từ Excel bằng VBA:
Dim LoginRequest As Object
Set LoginRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
LoginRequest.Open "POST", "http://...", False
LoginRequest.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
LoginRequest.send ("key1=value1&key2=value2")
Gửi yêu cầu nhận xác thực mã thông báo từ Excel bằng VBA:
Dim TCRequestItem As Object
Set TCRequestItem = CreateObject("WinHttp.WinHttpRequest.5.1")
TCRequestItem.Open "GET", "http://...", False
TCRequestItem.setRequestHeader "Content-Type", "application/xml"
TCRequestItem.setRequestHeader "Accept", "application/xml"
TCRequestItem.setRequestHeader "Authorization", "Bearer " & token
TCRequestItem.send
TCRequestItem Object
, bạn có thể đọc nó như TCRequestItem.ResponseText
sau : sau khi thực hiệnTCRequestItem.send