ShabaevMB
@ShabaevMB

Как в Java получить в фоновом режиме HTML-код страницы?

Здравствуйте.

Такой вопрос: как мне получить в фоновом режиме HTML-код страницы при помощи Java? Чтобы вот я в строку вводил URL страницы сайта, нажимал ОК, и он сам мне выдавал HTML код. Никакие скрипты сайтовские не интересуют. Просто нужен вытащенный аштиэмэловский код.

Помогите, пожалуйста. Какие методы Java этому могут поспособствовать? Совсем зеленый в этом всём.
  • Вопрос задан
  • 960 просмотров
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Наверно всё-таки javascript?

Прямо через него браузер не отдаст html из-за CORS.
Поэтому только с помощью бекенда или костылить https://stackoverflow.com/a/18447625, не уверен что это срабоатет.
Ответ написан
dimkss
@dimkss
Постоянно использую вот этот (кривой, руки не доходят отшлифовать) код:

public static String readPageFromUrl(String strURL) throws IOException, InterruptedException {
  URL pURL = new URL(strURL);

  URLConnection urlCon = (HttpURLConnection) pURL.openConnection();
  urlCon.setConnectTimeout(30000000);
  urlCon.setReadTimeout(30000000);
  urlCon.setRequestProperty("User-Agent", "Mozilla");

  BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
  StringBuilder result = new StringBuilder();
  String readLine;
  readLine = in.readLine();
  while (readLine != null) {
    result.append(readLine);

    readLine = in.readLine();
  }
  in.close();
  return result.toString();
}


Нюансы - не работает с charSet-ом, т.е. текст на некоторых сайтах будет в неправильной кодировке.
Решается заменой
in = new BufferedReader(new InputStreamReader(urlCon.getInputStream(), charset));
на
in = new BufferedReader(new InputStreamReader(urlCon.getInputStream(), "<нужный charSet>"));

И на некоторых сайтах стоит защита, конечно. Решается подстановкой правильного user agent, и других параметров. Я, для простоты, в таких случаях делаю вызов к wget из java.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы