Сайт разработчика Александр Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

HttpURLConnection: Подключаемся к URL

4-й курс/закрытая зона

Знакомство с классом HttpURLConnection
Загружаем страницу
Загружаем картинку
Загружаем картинку из интернета в ListActivity

Знакомство с классом HttpURLConnection

Для соединения с веб-серверами Android предлагает несколько способов взаимодействия. В новых проектах для современных устройств рекомендуется использовать класс HttpURLConnection, который мы с вами рассмотрим на примерах.

Класс java.net.HttpURLConnection является подклассом java.net.URLConnection и позволяет реализовать работу по отправке и получении данных из сети по протоколу HTTP. Данные могут быть любого типа и длины. Данный класс следует использовать для отправки и получения потоковых данных, размеры которых нельзя заранее определить. Используя данный класс, вам не нужно думать о сокетах и реализовывать собственные способы общения между клиентом и сервером.

Алгоритм использования следующий:

  • Получить объект HttpURLConnection через вызов URL.openConnection() и привести результат к HttpURLConnection
  • Подготовить необходимый запрос. Основное в запросе - сам сетевой адрес. Также в запросе можно указать различные метаданные: учётные данные, тип контента, куки сессии и т.п.
  • Опционально загрузить тело запроса. В этом случае используется метод setDoOutput(true). Передача данных, записанных в поток, возвращается через метод getOutputStream()
  • Прочитать ответ. Заголовок ответа обычно включает метаданные, такие как тип и длина контента, даты изменения, куки сессии. Прочитать данные из потока можно через метод getInputStream(). Если у ответа нет тела, то метод возвращает пустой поток.
  • Разорвать соединение. После прочтения ответа от сервера HttpURLConnection следует закрыть через вызов метода disconnect(). Тем самым вы освобождаете ресурсы, занимаемые соединением.

Например, для получения страницы по адресу http://developer.alexanderklimov.ru/android/ можно использовать такой код:


URL url = new URL("http://developer.alexanderklimov.ru/android/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

try {
    InputStream in = new BufferedInputStream(urlConnection.getInputStream());
    readStream(in);
    finally {
    urlConnection.disconnect();
   }
}

По умолчанию HttpURLConnection использует метод GET. Для использования POST вызывайте setDoOutput(true) и посылайте данные через openOutputStream(). Другие HTTP-методы (OPTIONS, HEAD, PUT, DELETE and TRACE) настраиваются через метод setRequestMethod(String).

Для работы через прокси-сервер используйте URL.openConnection(Proxy) при создании соединения.

Каждый экземпляр HttpURLConnection может использоваться только для одной пары запроса/ответа. Операции с соединениями следует проводить в отдельном потоке.

Вы вошли на сайт, как гость.
Необходимо зарегистрироваться, чтобы прочитать статью

Реклама