【问题标题】:MS Access VBA XML POST Using HTTP Using msxml2.DOMDocument.6.0MS Access VBA XML POST 使用 HTTP 使用 msxml2.DOMDocument.6.0
【发布时间】:2021-12-14 04:18:39
【问题描述】:

我的 Access 和 VBA 相当不错,但对 XML 和 http 请求的接触有限。 我正在尝试通过使用以下代码执行 HTTP POST 来返回一些 XML 结构化数据。 (如果我的措辞不正确,我深表歉意)

这是我得到的错误:

{"message":"Request could not be processed","details":null,"responseCode":500,"code":null,"target":null}

最初我遇到了 API 密码失败的问题,现在我已经克服了那个错误并且知道这是正确的。

  1. 谁能发现我做错了什么?
  2. 这可能是我构建 XML 的方式
  3. 请求 XML 是否还应包含标头信息,而其他标头信息用于响应?
  4. 我需要这个objXML.async = False我只是从别人的代码中复制的
    Sub MFGetRate()
    'Add a reference to Microsoft XML v6.0 via Tools > References
    
    
    Dim sGetResult              As String
    Dim httpObject              As Object
    Dim objXML                  As Object
    Dim sXML                    As String
    Dim apiURL                  As String
    
    Set objXML = CreateObject("msxml2.DOMDocument.6.0")
    Set httpObject = CreateObject("msxml2.serverxmlhttp.6.0")
    
    
    objXML.async = False
    
    
        sXML = "<rate>"
        sXML = sXML & "<account>"
        sXML = sXML & "<code>XXXX</code>"
        sXML = sXML & "</account>"
        sXML = sXML & "<serviceLevel>"
        sXML = sXML & "<code>M2H</code>"
        sXML = sXML & "</serviceLevel>"
        sXML = sXML & "<origin>"
        sXML = sXML & "<freightRequiredDateTime>2021-11-04T17:33:10</freightRequiredDateTime>"
        sXML = sXML & "<freightRequiredDateTimeZone>New Zealand Standard Time</freightRequiredDateTimeZone>"
        sXML = sXML & "<address>"
        sXML = sXML & "<suburb>Rosedale</suburb>"
        sXML = sXML & "<postCode>0000</postCode>"
        sXML = sXML & "<town/>"
        sXML = sXML & "<city>Auckland</city>"
        sXML = sXML & "<stateCode/>"
        sXML = sXML & "<countryCode>NZ</countryCode>"
        sXML = sXML & "</address>"
        sXML = sXML & "</origin>"
        sXML = sXML & "<destination>"
        sXML = sXML & "<address>"
        sXML = sXML & "<suburb>XXXXXX</suburb>"
        sXML = sXML & "<postCode>0000</postCode>"
        sXML = sXML & "<town/>"
        sXML = sXML & "<city>XXXXXX</city>"
        sXML = sXML & "<stateCode/>"
        sXML = sXML & "<countryCode>NZ</countryCode>"
        sXML = sXML & "</address>"
        sXML = sXML & "</destination>"
        sXML = sXML & "<freightDetails>"
        sXML = sXML & "<units>1</units>"
        sXML = sXML & "<packTypeCode>CTN</packTypeCode>"
        sXML = sXML & "<height/>"
        sXML = sXML & "<length/>"
        sXML = sXML & "<width/>"
        sXML = sXML & "<weight>30</weight>"
        sXML = sXML & "<volume>.1</volume>"
        sXML = sXML & "</freightDetails>"
        sXML = sXML & "</rate>"
    
    
    objXML.Load (sXML)
    
    
    apiURL = "https://api.mainfreight.com/transport/1.0/Customer/Rate?region=NZ"
    
     sRequest = apiURL
     httpObject.Open "POST", sRequest, False
     httpObject.setRequestHeader "Content-Type", "application/xml; charset=utf-8"
     httpObject.setRequestHeader "Authorization", "Secret XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
     httpObject.Send objXML.XML
     
     
     sGetResult = httpObject.responseText
    
    Debug.Print sGetResult
    
    
    
    End Sub

【问题讨论】:

  • 基于API documentation(如果您可以在您的问题中提供相关文档,那就太好了,这样我们就不必谷歌了...),您似乎缺少@ &lt;freightDetails&gt; 标签内的 987654327@ 标签。尝试在sXML = sXML &amp; "&lt;units&gt;1&lt;/units&gt;" 之前插入sXML = sXML &amp; "&lt;freightDetail&gt;" 和sXML = sXML &amp; "&lt;/freightDetail&gt;" 在sXML = sXML &amp; "&lt;/freightDetails&gt;" 之前
  • 你也许可以直接传递sXML,即httpObject.Send sXML
  • 使用 API 测试工具如 {Postman](postman.com)) 会有所帮助,因为那里很容易修改请求参数。一旦你找到了一些被证明可以与你的 API 一起工作的东西,你就会确切地知道用 XmlHttpRequest 重新实现什么。
  • 您尚未将所需的“Accept”标头添加到 POST 请求中。 developer.mainfreight.com/global/en/global-home/transport-api/…
  • @RaymondWu - 你是对的。在手机上我只看到“你必须添加”,并没有向右滚动……

标签: xml vba http ms-access post


【解决方案1】:

将请求正文作为字符串发送:

httpObject.Send sXML

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 2019-05-02
    • 1970-01-01
    • 2020-07-03
    • 2015-10-27
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多