【发布时间】: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 是的,刚刚发布了答案,希望一切都清楚!