Проблема вызова шлюза API через клиент Vertx - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь подключиться к AWS API-шлюзу с помощью веб-клиента Vertx:

        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 работает по-другому?

1 Ответ

0 голосов
/ 07 апреля 2020

Итак, мы выяснили проблему, оказалось, что используемые нами данные json не были должным образом переданы в реализации Vertx.

Таким образом, мы можем просто создать новый JSONObject, создать данные и используйте этот объект, чтобы выявить подпись aws, а также передать тот же объект в фактическом вызове API.

Спасибо!

...