2009-11-30 10 views
8

Tôi có quyền truy cập vào một API. API lấy một bài đăng XML làm đầu vào và sau đó trả về một phản ứng XML với các dữ liệu có liên quan.Thực hiện HTTP Post từ bên trong Excel và Parse Results

Tôi muốn

  1. Gửi HTTP Đăng lên Server (Authentication và yêu cầu sẽ được gửi đính kèm)
  2. Nhận phản ứng (Một trong những lựa chọn để được trả lại là CSV hoặc XML)
  3. Chèn dữ liệu vào các hàng và cột thích hợp và sau đó thực hiện phân tích dữ liệu bằng bảng tổng hợp.

Tôi không có một nền tảng lập trình trong excel nhưng cảm thấy thoải mái với các ngôn ngữ web scripting khác nhau, HTML, CSS, Javascript, vv

Bất kỳ ý tưởng?

Trả lời

6

Phía yêu cầu Excel có thể được xử lý bằng mã VBA này.

Sub GetStuff() 

Dim objXML As Object 
Dim strData As String 
Dim strResponse As String 

strData = "Request" 
Set objXML = CreateObject("MSXML2.XMLHTTP") 

objXML.Open "POST", "www.example.com/api?" & strData, False 
objXML.Send 
strResponse = objXML.responsetext 

MsgBox strResponse 

End Sub 
6

Nếu bạn cần gửi xml đầu vào của mình làm nội dung thư ở đây là cách bạn có thể thực hiện. Bạn có thể cần phải thêm hoặc thay đổi tiêu đề Yêu cầu để làm cho nó hoạt động cho bạn.

Sử dụng đối tượng DOMDocument giúp dễ dàng làm việc với tài liệu xml của bạn.

Thêm tham chiếu dự án vào;

  • Microsoft WinHTTP Services, phiên bản 5.1
  • Microsoft XML, v6.0

Ví dụ:

Dim xmlInput As String 
xmlInput = "<YourXmlRequest></YourXmlPayload>" 

Dim oXmlHttp As MSXML2.XMLHTTP60 
Set oXmlHttp = New MSXML2.XMLHTTP60 

oXmlHttp.Open "POST", serviceURL, False, "UserName", "Password" 
oXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
oXmlHttp.setRequestHeader "Connection", "Keep-Alive" 
oXmlHttp.setRequestHeader "Accept-Language", "en" 

oXmlHttp.send xmlInput 

Debug.Print oXmlHttp.responseText 

Dim oXmlReturn As MSXML2.DOMDocument60 
Set oXmlReturn = New MSXML2.DOMDocument60 
oXmlReturn.loadXML oXmlHttp.responseText 
+0

này có vẻ tốt. Tuy nhiên, tôi đang cố gắng phân loại những gì tôi cần tham khảo để tôi có thể sử dụng các loại biến này. "XMLHTTP" ... etc – Scott

+0

Có vẻ như tôi cần phải bao gồm Microsoft XML? – Scott

2

Đây là những gì tôi đã kết thúc bằng:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
objHTTP.Open "POST", urlPath, False 
objHTTP.setRequestHeader "Content-Type", "text/xml" 
objHTTP.send (request) 
0

Tôi đề nghị sử dụng WinHttp.WinHttpRequest.5.1 thay vì MSXML2.XMLHTTP bất cứ khi nào bạn cần xác thực cửa sổ, vì nó cho phép bạn sử dụng thông tin xác thực người dùng hiện tại để đăng nhập. Dưới đây là một ví dụ

Dim http As Object 
Set http = CreateObject("WinHttp.WinHttpRequest.5.1") 
http.SetAutoLogonPolicy 0 
http.Open "POST", "http://myUrl.html?param1=value1", False 
http.setRequestHeader "Content-Type", "text/json" 
http.setRequestHeader "User-Agent", "Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405" 
http.send ("") 

tham khảo: https://github.com/VBA-tools/VBA-Web/issues/15