Vertx пост-запрос поиска домена не удалось - PullRequest
0 голосов
/ 08 апреля 2020

Я создал webClient как:

WebClientOptions options = new WebClientOptions();
WebClient client = WebClient.create(vertx, options);
String host = "https://example.com/";

и пытаюсь выполнить вызов POST команды json как:

client.post(8080, host, "/api/executor/command")
.ssl(false)
.rxSendJson(jsonCmd)
.map((HttpResponse<Buffer> r) -> {
System.out.println("response: " + r.bodyAsString());}).toObservable();})
.doOnError( error -> System.err.println("The error message is: " + error.getMessage()))

Но я получаю эту ошибку :

The error message is: Search domain query failed. Original hostname: 'https://example.com/' failed to resolve 'https://example.com/.lan' after 3 queries 

При выполнении того же вызова curl на терминале, что и:

curl  https://example.com/api/executor/command -XPOST --insecure  -d 'jsonCmd'

Я не получаю никакой ошибки, и сервер отвечает мне. Что я делаю неправильно? Я новичок в vertx / java.

Спасибо

Matteo

РЕДАКТИРОВАТЬ

Я добавил, как рекомендуется, варианты

options.setTrustAll(true);

и удалил println и теперь, похоже, работает, спасибо ..

Ответы [ 2 ]

3 голосов
/ 08 апреля 2020

Вы отправляете запрос с помощью cURL на порт 443, используя ssl (как предполагает HTTPS, 443 - это порт HTTPS по умолчанию). Принимая во внимание, что вы не только отключаете ssl (используя ssl(false)), но также используете неправильный номер порта и неправильное имя хоста (вместо имени хоста вы указываете URL, имя хоста не будет содержать префикс https://). Ваш код должен быть таким:

String host = "example.com";
client.post(443, host, "/api/executor/command")
    .ssl(true)
...and so on...

, чтобы он соответствовал тому, что делает cURL.

2 голосов
/ 08 апреля 2020

Рядом с тем, что уже сказал Дмитрий, вы не можете отобразить () на println, потому что он возвращает void, поэтому для меня этот фрагмент кода не скомпилируется, поэтому я думаю, что вы что-то там упустили.

Но в основном это происходит из-за неправильной работы ssl и порта. Задайте параметры для setTrustAll tot true, если вы не хотите, чтобы клиент проверял сертификаты.

Это сделает то же самое, что и в вашей команде curl с --insecure

...