Как Вы Программно Загружаете Веб-страницу в Java

116
задан jjnguy 31 December 2010 в 17:18
поделиться

4 ответа

Вот некоторый протестированный код с помощью Java класс URL . Я рекомендовал бы, делают лучшее задание, чем я делаю здесь обрабатывания исключений или передачи их стек вызовов, все же.

public static void main(String[] args) {
    URL url;
    InputStream is = null;
    BufferedReader br;
    String line;

    try {
        url = new URL("http://stackoverflow.com/");
        is = url.openStream();  // throws an IOException
        br = new BufferedReader(new InputStreamReader(is));

        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    } catch (MalformedURLException mue) {
         mue.printStackTrace();
    } catch (IOException ioe) {
         ioe.printStackTrace();
    } finally {
        try {
            if (is != null) is.close();
        } catch (IOException ioe) {
            // nothing to see here
        }
    }
}
106
ответ дан Stas Yak 24 November 2019 в 02:12
поделиться

Ну, Вы могли пойти со встроенными библиотеками такой как URL и URLConnection, но они не дают особый контроль.

Лично я пошел бы с библиотека Apache HTTPClient .
Редактирование: HTTPClient был установлен на конец жизни Apache. Замена: Компоненты HTTP

12
ответ дан rogerdpack 24 November 2019 в 02:12
поделиться

На поле Unix/Linux Вы могли просто выполнить 'wget', но это не действительно опция, если Вы пишете межплатформенному клиенту. Конечно, это предполагает, что Вы действительно не хотите делать много с данными, которые Вы загружаете между точкой загрузки его и этим поражающий диск.

0
ответ дан Timo Geusch 24 November 2019 в 02:12
поделиться

Ответ Билла очень хорош, но вы можете сделать некоторые вещи с запросом, например, сжатие или пользовательские агенты. В следующем коде показано, как можно выполнять различные типы сжатия ваших запросов.

URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // Cast shouldn't fail
HttpURLConnection.setFollowRedirects(true);
// allow both GZip and Deflate (ZLib) encodings
conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
String encoding = conn.getContentEncoding();
InputStream inStr = null;

// create the appropriate stream wrapper based on
// the encoding type
if (encoding != null && encoding.equalsIgnoreCase("gzip")) {
    inStr = new GZIPInputStream(conn.getInputStream());
} else if (encoding != null && encoding.equalsIgnoreCase("deflate")) {
    inStr = new InflaterInputStream(conn.getInputStream(),
      new Inflater(true));
} else {
    inStr = conn.getInputStream();
}

Чтобы также установить пользовательский агент, добавьте следующий код:

conn.setRequestProperty ( "User-agent", "my agent name");
24
ответ дан 24 November 2019 в 02:12
поделиться
Другие вопросы по тегам:

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