В Java предоставляется подкласс HttpURLConnection, производный от класса URLConnection и поддерживающий соединения по сетевому протоколу НТТР. Чтобы получить объект класса HttpURLConnection, следует вызвать метод openConnection() для объекта типа URL, как описано в данной статье, но результат нужно привести к типу HttpURLConnection.
Разумеется , при этом необходимо убедиться, что соединение по протоколу HTTP действительно установлено. Получив ссылку HttpURLConnection , можно вызвать любые методы, унаследованные от класса URLConnection, а также любые методы, определенные в самом классе HttpURLConnection.
Некоторые методы из этого класса перечислены ниже:
static boolean getFollowRedirects() — возвращает логическое значение true, если автоматически следует переадресация, а иначе — логическое значение false.
String getRequestMethod() — возвращает строковое представление метода, которым выполняется запрос по URL. По умолчанию запрос выполняется методом GET. Доступны и другие методы, в том числе и POST.
int getResponseCode() throws IOException — возвращает код ответа по протоколу НТТР. Если код ответа не может быть получен, возвращается значение — 1. При разрыве соединения генерируется исключение типа IОЕхсерtiоn.
String getResponseMessage() throws IOException — возвращает ответное сообщение, связанное с кодом ответа. Если ответное сообщение отсутствует, то возвращает пустое значение null.
static void setFollowRadirects(boolean способ) — если параметр способ принимает логическое значение true, то переадресация выполняется автоматически. Если же он принимает логическое значение false, то переадресация не происходит. По умолчанию переадресация выполняется автоматически.
void setRequestмethod(String способ) throws ProtocolZxception — задает метод, которым делаются запросы по протоколу HTTP, в соответствии со значением параметра способ. По умолчанию принят метод GET, но доступны и другие методы, в том числе POST. Если в качестве параметра способ указано неправильное значение, то генерируется исключение типа ProtocolExoeption.
В приведенном ниже примере программы демонстрируется применение класса HttpURLConnection. Сначала в этой программе устанавливается соединение с веб-сайтом pro-java.ru, а затем выводится метод запроса, код ответа и ответное сообщение. И наконец, выводятся ключи и значения из заголовка ответа.
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 |
// Ниже приведен пример применения класса HttpURLConnection import java.net.*; import java.io.*; import java.util.*; public class HttpURLConnectionExample { public static void main(String[] args) throws Exception { URL myUrl = new URL("http://pro-java.ru"); HttpURLConnection myUrlCon = (HttpURLConnection) myUrl.openConnection(); // Вывести метод запроса System.out.println("Метод запроса: " + myUrlCon.getRequestMethod()); // Вывести код ответа System.out.println("Ответное сообщение: " + myUrlCon.getResponseMessage()); // Получить список полей и множество ключей из заголовка Map<String, List<String>> myMap = myUrlCon.getHeaderFields(); Set<String> myField = myMap.keySet(); System.out.println("\nДалее следует заголовок:"); // Вывести все ключи и значения из заголовка for(String k : myField) { System.out.println("Ключ: " + k + " Значение: " + myMap.get(k)); } } } |
Ниже приведен результат, выводимый данной программой ( разумеется, точный ответ, возвращаемый сайтом pro-java.ru, будет меняться с течением времени).
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Метод запроса: GET Ответное сообщение: OK Далее следует заголовок: Ключ: null Значение: [HTTP/1.1 200 OK] Ключ: X-Pingback Значение: [http://pro-java.ru/xmlrpc.php] Ключ: Vary Значение: [Accept-Encoding] Ключ: Transfer-Encoding Значение: [chunked] Ключ: Date Значение: [Sun, 18 Oct 2015 11:33:45 GMT] Ключ: Connection Значение: [keep-alive] Ключ: Content-Type Значение: [text/html; charset=UTF-8] Ключ: X-Powered-By Значение: [PHP/5.3.3-7+squeeze18] Ключ: Server Значение: [nginx/0.7.67] |
Обратите внимание на порядок вывода ключей и значений из заголовка. Сначала вызывается метод getHeaderFields() , унаследованный от класса URLConnection, чтобы получить отображение ключей и значений из заголовка. Затем для этого отображения вызывается метод keySet(), чтобы извлечь множество ключей из заголовка. Далее полученное множество ключей перебирается в цикле for в стиле for each, где вызывается также метод get(), чтобы получить значение, связанное с каждым ключом.