Класс URLConnection является классом общего назначения и предназначен для доступа к атрибутам удаленного ресурса.
Как только будет установлено соединение с удаленным сервером, класс URLConnection можно использовать для просмотра свойств удаленного объекта, прежде чем переносить его локально. Эти атрибуты раскрываются в спецификации сетевого протокола HTTP и как таковые имеют смысл только для объектов типа URL, использующих протокол HTTP.
В классе URLConnection определяется несколько методов. Некоторые из них перечислены ниже:
int getContentLength() — возвращает длину в байтах содержимого, связанного с ресурсом. Если длина недоступна, возвращается значение — 1. Заметьте, функция возвращает тип int.
long getContentLengthLong() — возвращает длину в байтах содержимого, связанного с ресурсом. Если длина недоступна, возвращается значение — 1. Заметьте, функция возвращает тип long.
String getContentТype() — возвращает тип содержимого, обнаруженного в ресурсе. Это значение поля заголовка content-type. Возвращает пустое значение null, если тип содержимого недоступен.
long getDate() — возвращает время и дату ответа в миллисекундах, прошедших с 1 января 1970 г.
long getExpiration() — Возвращает время и дату срока действия ресурса в миллисекундах, прошедших с 1 января 1970 г. Если дата срока действия ресурса недоступна, возвращается нуль.
String getHeaderField(int индекс) — возвращает значение поля заголовка по указанному индексу. (Индексы полей заголовков нумеруются, начиная с нуля). Если значение параметра индекс превышает количество полей, то возвращается пустое значение null.
String getHeaderField(String имя_поля) — возвращает значение поля заголовка по указанному имен имя_поля. Если указанное поле не найдено, то возвращается пустое значение null.
String getHeaderFieldKey(int индекс) — возвращает ключ поля заголовка по указанному индексу. (Индексы полей заголовков нумеруются, начиная с нуля.) Если значение параметра индекс превышает количество полей, то возвращается пустое значение null.
Мap<String , List<String>> getHeaderFields() — возвращает отображение, содержащее все поля заголовков вместе с их значениями.
long getLastModified() — Возвращает время и дату последней модификации ресурса в миллисекундах, прошедших с 1 января 1970 г. Если эта информация недоступна, то возвращается нуль.
InputStream getInputStream() thorws IOException — возвращает поток ввода типа InputStream, привязанный к ресурсу. Этот поток ввода может использоваться для получения содержимого ресурса.
Обратите внимание на то, что в классе URLConnection определяется несколько методов, управляющих информацией из заголовков. Заголовок состоит из пар ключей и значений, представленных в виде символьных строк.
Используя метод getHeaderField(), можно получить значение, связанное с ключом заголовка. Вызывая метод getHeaderField() , можно получить отображение, содержащее все заголовки. Несколько стандартных полей заголовков доступны непосредственно через такие методы, как getDate() и getContentType().
В следующем примере создается объект типа URLConnection с помощью метода openConnection(), вызываемого для объекта типа URL, а затем он применяется для проверки свойств и содержимого документа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
// Ниже приведен пример применения класса URLConnection import java.net.*; import java.io.*; import java.util.Date; public class URLConnectionExample { public static void main(String[] args) throws Exception{ int c; URL myUrl = new URL("http://www.pro-java.ru"); URLConnection myUrlCon = myUrl.openConnection(); // Получить дату long d = myUrlCon.getDate(); if(d == 0) System.out.println("Сведения о дате отсутствуют."); else System.out.println("Дата: " + new Date(d)); // Получить тип содержимого System.out.println("Типа содержимого: " + myUrlCon.getContentType()); // Получить дату срока действия ресурса d = myUrlCon.getExpiration(); if(d == 0) System.out.println("Сведения о сроке действия отсутствуют."); else System.out.println("Срок действия истекает: " + new Date(d)); // Получить дату последней модификации d = myUrlCon.getLastModified(); if(d == 0) System.out.println("Сведения о дате последней модификации отсутствуют."); else System.out.println("Дата последней модификации: " + new Date(d)); // Получить длину содержимого long length = myUrlCon.getContentLengthLong(); if(length == -1) System.out.println("Длина содержимого недоступна"); else System.out.println("Длина содержимого: " + length); if(length != 0) { System.out.println("=== Содержимое ==="); InputStream input = myUrlCon.getInputStream(); while(((c = input.read()) != -1)) { System.out.print((char) c); } input.close(); } else { System.out.println("Содержимое недоступно."); } } } |
В этой программе сначала устанавливается соединение по протоколу с сервером pro-java.ru через порт НТГР 80. Затем в ней выводятся несколько значений из заголовков и извлекается содержимое. Ради интереса попробуйте выполнить эту программу, наблюдая результаты ее выполнения. А затем попробуйте для сравнения выбрать другой веб-сайт.
Вот что получилось у нас:
1 2 3 4 5 6 7 8 9 10 11 |
Дата: Sun Oct 18 13:51:50 EEST 2015 Типа содержимого: text/html; charset=UTF-8 Сведения о сроке действия отсутствуют. Сведения о дате последей модификации отсутствуют. Длина содержимого недоступна === Содержимое === <!DOCTYPE html> <html lang="ru-RU" class="no-js"> <head> <meta charset="UTF-8" /> ...мы урезали весь исходный код... |