vertx post 调用搜索域查询失败

vertx post call search domain query failed

我创建了一个 webClient 作为:

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

我正在尝试对 json 命令进行 POST 调用,如下所示:

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.

的新人

谢谢

马特奥

编辑

我已经按照推荐添加了选项

options.setTrustAll(true);

并删除了 println,现在它似乎可以工作了,谢谢..

您 post 您使用 cURL 的查询使用 ssl 到端口 443(如 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 所做的相匹配。

除了 demitry 已经说过的,你不能将 map() 映射到 println,因为它返回 void,所以对我来说这段代码片段无法编译,所以我认为你错过了一些东西。

但主要是ssl和端口不对导致失败。如果您不希望客户端验证证书,请将 setTrustAll 的选项设置为真。

它将执行与使用 --insecure

的 curl 命令相同的操作