【问题标题】:Sending JSON POST request in VBA在 VBA 中发送 JSON POST 请求
【发布时间】:2018-01-07 01:52:27
【问题描述】:

我有以下 JSON POST 示例代码,我正在尝试将其转换为 Excel 的 VBA:

POST /services/shipper/orders HTTP/1.1
Content-Type: application/json
User-Agent: Mozilla 5.0
Host: qa.etowertech.com
X-WallTech-Date: Tue, 06 Jan 2018 21:20:27 GMT
Authorization: WallTech test5AdbzO5OEeOpvgAVXUFE0A:79db9e5OEeOpvgAVXUFWSD

这是我想出的代码:

With JsonHTTP
             .Open "POST", "http://qa.towertech.com/services/shipper/orders", False
             .setRequestHeader "RequestName", "application/json"
             .setRequestHeader "Accept", "application/json"
             .setRequestHeader "User-Agent", "Mozilla 5.0"
             .setRequestHeader "Host", "qa.etowertech.com"
             .setRequestHeader "X-WallTech-Date", "Tue, 06 Jan 2018 21:20:27 GMT"
             .setRequestHeader "Authorization", "WallTech test5AdbzO5OEeOpvgAVXUFE0A:79db9e5OEeOpvgAVXUFWSD"
             .send (body)
End With

我不确定POST /services/shipper/orders HTTP/1.1 输入应该去哪里

我不断收到这样的回复:

{
  "status": "Failed",
  "errors": [
    {
      "code": 100004,
      "message": "System internal error"
    }
  ],
  "data": null
}

编辑:

我得到的当前响应:

{
  "status": "Failed",
  "errors": [
    {
      "code": 401,
      "message": "Authorization information is invalid."
    }
  ],
  "data": null
}

我刚刚发现我错过了签名(请参阅下面的说明),但不确定如何呈现它以及它在请求中的确切位置?

X-WallTech-日期

EEE, dd MMM yyyy HH:mm:ss zzz

授权

WallTech <Access Token>:<Base64 Encoded HMAC SHA-1 Hash>

签名字符串

<HTTP Verb> + "\0x000A" + <X-WallTech-Date Header> + "\0x000A" + <Full URL>

【问题讨论】:

  • 检查这行 .setRequestHeader "RequestName", "application/json" 是否为:.setRequestHeader "Content-Type", "application/json" -- 以及请求是否需要通过 HTTPS 发送,而不仅仅是 HTTP --- 以及您发送的 Authorization 标头是否正确(服务器可能期望 WallTech 之后的字符串是 base64 编码的)。我认为 /services/shipper/orders 应该进入 URL(正如你所做的那样),所以这是正确的,但你还应该检查你在请求正文中发送的 JSON 是否有效。
  • 我也会从您的代码/您发送的请求中注释掉或删除这一行:X-WallTech-Date: Tue, 06 Jan 2018 21:20:27 GMT
  • body 未显示正在定义或创建。
  • @chillin 成功了!我确实错误地复制了 RequestName 的 Content-Type。谢谢!
  • @omegastripes 是的,刚刚发布了答案,希望一切都清楚!

标签: json excel vba rest api


【解决方案1】:

解决办法如下:

url = "http://qa.towertech.com/services/shipper/orders"
token = "xxxxxx" ' API token goes here
auth = Base64_HMACSHA1("POST" & Chr(10) & timestamp & Chr(10) & url, key)

With JsonHTTP
             .Open "POST", url, False
             .setRequestHeader "RequestName", "application/json"
             .setRequestHeader "Accept", "application/json"
             .setRequestHeader "User-Agent", "Mozilla 5.0"
             .setRequestHeader "Host", "qa.etowertech.com"
             .setRequestHeader "X-WallTech-Date", timestamp
             .setRequestHeader "Authorization", "Walltech " & token & ":" & auth
             .send (body)
End With

问题是 Base64 函数中缺少密钥,因此验证字符串编码不正确

希望这可以帮助其他有同样情况的人!

【讨论】:

    猜你喜欢
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2012-12-04
    • 2014-06-25
    相关资源
    最近更新 更多