【问题标题】:Perform HTTP Post from within Excel and Parse Results从 Excel 中执行 HTTP Post 并解析结果
【发布时间】:2009-11-30 15:03:46
【问题描述】:

我可以访问 API。 API 将 XML 帖子作为输入,然后返回带有相关数据的 XML 响应。

我想要

  1. 将 HTTP Post 发送到服务器(身份验证和请求将一起发送)
  2. 接收响应(返回的选项之一是 CSV 或 XML)
  3. 将数据插入适当的行和列,然后使用数据透视表执行数据分析。

我没有 excel 编程背景,但我熟悉不同的网络脚本语言、HTML、CSS、Javascript 等。

有什么想法吗?

【问题讨论】:

    标签: excel http winhttprequest post vba


    【解决方案1】:

    可以使用此 VBA 代码处理 Excel 请求端。

    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
    

    【讨论】:

      【解决方案2】:

      如果您需要将您的输入 xml 作为消息正文发送,您可以这样做。 您可能需要添加更多或更改请求标头才能使其为您工作。

      使用 DOMDocument 对象可以轻松处理您的 xml 文档。

      添加项目引用;

      • Microsoft WinHTTP 服务,版本 5.1
      • 微软 XML,v6.0

      例子:

      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
      

      【讨论】:

      • 这看起来不错。但是,我正在尝试整理我需要引用的内容,以便我可以使用这些变量类型。 "XMLHTTP" ...等
      • 看来我需要包含 Microsoft XML?
      【解决方案3】:

      这是我最终使用的:

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

      【讨论】:

        【解决方案4】:

        我建议在需要 Windows 身份验证时使用WinHttp.WinHttpRequest.5.1 而不是MSXML2.XMLHTTP,因为它允许您使用当前用户凭据登录。这是一个例子

        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 ("")
        

        参考:https://github.com/VBA-tools/VBA-Web/issues/15

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-14
          • 1970-01-01
          • 1970-01-01
          • 2018-02-19
          • 2011-02-23
          • 1970-01-01
          相关资源
          最近更新 更多