2017-02-08 39 views
1

我对vertx HttpClient有问题。 下面的代码显示了使用vertx和普通java测试GET。Vertx HttpClient getNow不能正常工作

Vertx vertx = Vertx.vertx(); 
    HttpClientOptions options = new HttpClientOptions() 
      .setTrustAll(true) 
      .setSsl(false) 
      .setDefaultPort(80) 
      .setProtocolVersion(HttpVersion.HTTP_1_1) 
      .setLogActivity(true); 
    HttpClient client = vertx.createHttpClient(options); 

    client.getNow("google.com", "/", response -> { 
     System.out.println("Received response with status code " + response.statusCode()); 
    }); 
    System.out.println(getHTML("http://google.com")); 

凡getHTML()就是从这里开始:How do I do a HTTP GET in Java?

这是我的输出:

<!doctype html><html... etc <- correct output from plain java 
Feb 08, 2017 11:31:21 AM io.vertx.core.http.impl.HttpClientRequestImpl 
SEVERE: java.net.UnknownHostException: failed to resolve 'google.com'.  Exceeded max queries per resolve 3 

但vertx无法连接。这里有什么问题?我没有使用任何代理。

+1

魔法门相关https://github.com/eclipse/vert.x/issues/1753。你可以尝试使用Vert.x 3.4.0.Beta1吗?它应该在该版本中修复。另外,您可以使用-Dvertx.disableDnsResolver = true'回退到JVM解析器。 – tsegismont

+0

我试过3.3.3和3.4.0.Beta1,它不工作。 我要检查这个jvm参数。 –

+1

-Dvertx.disableDnsResolver = true的作品:) 请回答这个问题(我会接受)。 –

回答

0

以下是适用于我的示例代码。

public class TemplVerticle extends HttpVerticle { 

public static void main(String[] args) { 
    Vertx vertx = Vertx.vertx(); 

    // Create the web client and enable SSL/TLS with a trust store 
    WebClient client = WebClient.create(vertx, 
      new WebClientOptions() 
        .setSsl(true) 
        .setTrustAll(true) 
        .setDefaultPort(443) 
        .setKeepAlive(true) 
        .setDefaultHost("www.w3schools.com") 

    ); 


    client.get("www.w3schools.com") 

      .as(BodyCodec.string()) 
      .send(ar -> { 
       if (ar.succeeded()) { 
        HttpResponse<String> response = ar.result(); 
        System.out.println("Got HTTP response body"); 
        System.out.println(response.body().toString()); 

       } else { 
        ar.cause().printStackTrace(); 
       } 
      }); 
} 

}