如何使用 vertx 执行跨源的 GET 请求?
How to perform a GET request to cross origin using vertx?
我在服务器端使用 vert.x
和 JAVA
。
当客户端转到 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();
}
});
我在服务器端使用 vert.x
和 JAVA
。
当客户端转到 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();
}
});