Вот некоторый протестированный код с помощью 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
}
}
}
Ну, Вы могли пойти со встроенными библиотеками такой как URL и URLConnection, но они не дают особый контроль.
Лично я пошел бы с библиотека Apache HTTPClient .
Редактирование: HTTPClient был установлен на конец жизни Apache. Замена: Компоненты HTTP
На поле Unix/Linux Вы могли просто выполнить 'wget', но это не действительно опция, если Вы пишете межплатформенному клиенту. Конечно, это предполагает, что Вы действительно не хотите делать много с данными, которые Вы загружаете между точкой загрузки его и этим поражающий диск.
Ответ Билла очень хорош, но вы можете сделать некоторые вещи с запросом, например, сжатие или пользовательские агенты. В следующем коде показано, как можно выполнять различные типы сжатия ваших запросов.
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");