Тайм-аут JSoup для определенных URL-адресов с определенного сервера - PullRequest
0 голосов
/ 08 февраля 2019

Запуск сценария JSoup с моего компьютера => работает нормально.

Запуск этого же сценария с моего удаленного сервера => выдает ошибку java.net.SocketTimeoutException: connect timed out.

Проблема воспроизводится только с определенными URL-адресами,Я попытался запустить этот же скрипт на других веб-страницах с этого удаленного сервера, и все прошло нормально.

Мой сценарий:

private Document getDom(String root){
    Document dom = null;
    try {
        dom = Jsoup.connect(root).get();
    } catch (IOException e){
        System.out.println(e);
        try {
            dom = Jsoup.parse(new URL(root).openStream(), "UTF-8", root);
        } catch (IOException e2){
            System.out.println(e2);
        }
    }
    return dom;
}

root - это целевой URL, в моем примере https://hightest.nc/sitemap.xml.

Есть идеи, откуда возникла проблема?Заранее спасибо.

1 Ответ

0 голосов
/ 10 февраля 2019

Я только что запустил этот код, и он возвращает мне ваш XML, когда я исправил ваш блок catch. Первый перехват, похоже, не был правильно закрыт.Другая потенциальная проблема при превышении времени ожидания соединения - вы не добавляете userAgent.Попробуйте этот блок кода ниже, который я протестировал, и он работает для меня.

С сервера вы также можете попробовать настроить время ожидания для соединения, чтобы увидеть, будет ли это работать для вас.Попробуйте, возможно, настроить его на большее время ожидания..timeout (7000)

 private Document getDom(String root){
        Document dom = null;
        try {
            dom = Jsoup.connect(root)
                    .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) 
           AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36")
                    .get();
        } catch (IOException e) {
            System.out.println(e);
        }
            try {
                dom = Jsoup.parse(new URL(root).openStream(), "UTF-8", root);

            } catch (IOException e2){

                System.out.println(e2);
            }

          return dom;

        }
...