Как выполнить запрос GET для перекрестного происхождения с помощью 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

Можете ли вы уточнить ваше требование? Как я вижу, вы отправляете запрос на свой сервер с путем google.com

tsegismont 27.05.2019 15:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
573
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Давайте разберемся с некоторыми вещами.

Во-первых, перекрестное происхождение имеет отношение к браузерам. Вы отправляете запрос между серверами, поэтому здесь это не имеет значения.

Во-вторых, я надеюсь, что вам на самом деле не нужно отправлять запрос 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/….

Yael Pesso 28.05.2019 13:01

Я обновил свой первоначальный ответ вашим примером и проверил, что он работает. Наслаждаться :)

Alexey Soshin 28.05.2019 13:13

Другие вопросы по теме