【问题标题】:vertx post call search domain query failedvertx post call 搜索域查询失败
【发布时间】:2020-04-08 11:07:13
【问题描述】:

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

【问题讨论】:

    标签: java webclient vert.x


    【解决方案1】:

    您使用 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 正在执行的操作相匹配。

    【讨论】:

    【解决方案2】:

    在 demitry 已经说过的内容旁边,你不能 map() 到 println,因为它返回 void 所以对我来说这段代码 sn-p 不会编译,所以我认为你在那里遗漏了一些东西。

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

    它的作用与你在 curl 命令中的 --insecure 相同

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 2015-08-16
      • 2021-08-26
      • 1970-01-01
      相关资源
      最近更新 更多