Vertx WebClient 网络请求接口使用中遇到的问题

1,162 阅读1分钟

getAbs方法注意事项

  • 参数 url 绝对路径必须包含 protocol(http, https 等), 否则会因为非法 url 抛出 crash
 client
   .getAbs("https://myserver.mycompany.com:4043/some-uri")
   .send()
   .onSuccess(res ->
     System.out.println("Received response with status code" + res.statusCode()))
   .onFailure(err ->
     System.out.println("Something went wrong " + err.getMessage()));

get()方法的参数注意事项

  • host 参数:必须不能包含 protocol,否则会出现 Unable to resolve host 异常。
  • reletiveUrl :必须是 / 开头,内部不会自动拼接,否则会出现400 Bad Request 异常。
 client
   .get(443, "myserver.mycompany.com", "/some-uri")
   .ssl(true)
   .send()
   .onSuccess(res ->
     System.out.println("Received response with status code" + res.statusCode()))
   .onFailure(err ->
     System.out.println("Something went wrong " + err.getMessage()));

vertx 网络请求报错 error: UnknownHostException: Failed to resolve url after N queries

原因是:构造的 WebClient 传入的参数 vertx (可通过如下代码构造) 需要配置 AddressResolverOptions。

private Vertx createVertx() {
    VertxOptions options = new VertxOptions();
    AddressResolverOptions addressResolverOptions = new AddressResolverOptions();
    addressResolverOptions.setServers(NameServer.getNameServers());
    options.setAddressResolverOptions(addressResolverOptions);
    return Vertx.vertx(options);
}