Я использую 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
Давайте разберемся с некоторыми вещами.
Во-первых, перекрестное происхождение имеет отношение к браузерам. Вы отправляете запрос между серверами, поэтому здесь это не имеет значения.
Во-вторых, я надеюсь, что вам на самом деле не нужно отправлять запрос 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();
}
});
Спасибо! Он работает с Google, но на самом деле я хотел выполнить запрос GET к другому URL-адресу, который является API погоды. Код, который вы написали, работает для Google, но не для этого URL API погоды: api.openweathermap.org/data/2.5/….
Я обновил свой первоначальный ответ вашим примером и проверил, что он работает. Наслаждаться :)
Можете ли вы уточнить ваше требование? Как я вижу, вы отправляете запрос на свой сервер с путем
google.com