【发布时间】:2020-04-05 15:55:13
【问题描述】:
我正在尝试使用 Vertx Webclient 连接到 AWS API 网关:
HttpRequest<Buffer> request = webClient.postAbs(targetHost);
request.putHeader("Authorization", auth);
request.putHeader("Content-Type", contentType);
request.putHeader("Host", hostName);
request.sendJson(new JsonObject(jsonData), response -> {
if (response.succeeded()) {
final JsonObject result = response.result().bodyAsJsonObject();
logger.info(result.toString());
routingContext.response()
.setStatusCode(200)
.putHeader("Content-Type", "application/json")
.end(result.toString());
} else {
logger.error(response.cause().getMessage());
routingContext.fail(new Exception(response.cause().getMessage()));
}
});
并且总是收到相同的错误响应,即我们计算的请求签名与您提供的签名不匹配。检查您的 AWS 秘密访问密钥和签名方法。
但如果我使用 javax.ws.rs.client.WebTarget,
Client client = ClientBuilder.newClient();
WebTarget target = client.target(targetHost);
response=target.request()
.header("Authorization", auth)
.header("Content-Type", contentType)
.header("Host", hostName)
.post(jsonData,Response.class);
我能够收到正确的回复。
知道 Vertx 网络客户端的不同之处吗?
【问题讨论】:
-
contentSha256是如何计算的?在 Vert.x 示例中,您让 vert.x 创建 json 字符串,但在 JAX-RS 示例中,它似乎是手动创建的 -
它通常是一个 json 字符串.. 我尝试在两个调用中使用相同的行为并没有帮助..
-
contentSha256 只是 json 字符串的 sha256 值。我发现的另一件事是 Vertx 在内部将 443 之类的端口分配给主机名,这对于典型的 Rest 端点调用不是必需的...有没有办法解决这个问题?
标签: vert.x