如何使用 vertx 执行跨源的 GET 请求?

How to perform a GET request to cross origin using vertx?

我在服务器端使用 vert.xJAVA。 当客户端转到 http://localhost:8080/hello 时,我希望浏览器转到 "google.com"。 我在执行 GET 请求时出错

    router.route("/hello").handler(routingContext -> {
        String url = "google.com";
        WebClient client = WebClient.create(vertx, new WebClientOptions().setSsl(true).setTrustAll(true).setDefaultPort(8080).setKeepAlive(true).setDefaultHost(url));
        client.get(url).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();
            }
        });

    });

错误:

io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: google.com/172.217.16.142:8080

让我们解决一些问题。

首先,跨源与浏览器有关。您正在发出 server-to-server 请求,因此与此处无关。

其次,我希望您实际上不需要向 google.com 发出请求,因为 Google 实际上试图阻止其他人以这种方式使用其搜索页面。

第三,您两次使用 url 参数。一次是在您设置默认主机时,第二次是在发出 get() 请求时。然后您还将端口设置为 8080,我上次检查时 google.com 没有公开。

产生类似的东西:

https://google.com:8080/google.com

要接收更有意义的响应,您可以尝试以下代码(我删除了路由部分):

Vertx vertx = Vertx.vertx();

    String url = "api.openweathermap.org";
    WebClient client = WebClient.create(vertx, new WebClientOptions().setDefaultPort(80).setDefaultHost(url));
    client.get("/data/2.5/weather?q=london,uk&units=metric&appid=e38f373567e83d2ba1b6928384435689").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());
        }
        else {
            ar.cause().printStackTrace();
        }
    });