首页 > 解决方案 > vertx post call 搜索域查询失败

问题描述

我创建了一个 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,现在它似乎可以工作了,谢谢..

标签: javawebclientvert.x

解决方案


您使用 ssl 将带有 cURL 的查询发布到端口 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 正在执行的操作相匹配。


推荐阅读