- Какую библиотеку работы с HTTP в Android выбрать?
- Для чего это вообще?
- Немного истории
- Сделайте HTTP-запрос с android
- 11 ответов
- обновление
- Оригинальный Ответ
- Android OkHttp3 Http Get Post Request Example
- 1. OKHttp Characters.
- 2. Add OkHttp3 Library In build.gradle.
- 2. Use OkHttp3 To Create HTTP Get Request Method Call Object.
- 3. Use OkHttp3 To Create HTTP Post Request Method Call Object.
- 4. Send Http Request Synchronously And Asynchronously.
- 5. OkHttp Get Post Request Example.
- Как отправлять HTTP-запросы на Java
- Вступление
- Как Работает HTTP?
- Отправка запросов с помощью HttpURLConnection
- Типы запросов
- Параметры запроса
- Git Essentials
- Заголовки запросов
- Тайм-ауты
- ОТПРАВИТЬ запрос
- ПОЛУЧИТЬ запрос
- Демонстрация
- Вывод
Какую библиотеку работы с HTTP в Android выбрать?
Представляю вашему вниманию перевод статьи «Which Android HTTP library to use?».
Для чего это вообще?
Немного истории
До Froyo HttpURLConnection имел некоторые не очень приятные баги. В частности, вызов close() у читаемого InputStream мог испортить пул соединений.
… большой размер их API мешает нам улучшать эту библиотеку без потери обратной совместимости. Команда Android не работает активно над Apache HTTP Client.
Apache HTTP client имеет мало багов на Eclair и Froyo, поэтому он является лучшим выбором для этих версий. А для Gingerbread и младше лучше подходит HttpURLConnection. Простота API и небольшой вес хорошо подходят для Android. Прозрачное сжатие и кэширование ответов помогают увеличить скорость и сохранить батарею. Новые приложения должны использовать HttpURLConnection.
Даже сегодня, если вы загляните в исходники Volley от Google (о ней я расскажу чуть попозже), вы сможете найти такое наследие:
Это классический пример фрагментации Android, которая заставляет страдать разработчиков. В 2013 году Square обратила внимание на эту проблему, когда выпускала OkHttp. OkHttp была создана для прямой работы с верхним уровнем сокетов Java, при этом не используя какие-либо дополнительные зависимости. Она поставляется в виде JAR-файла, так что разработчики могут использовать ее на любых устройствах с JVM (куда мы включаем, конечно, и Android). Для упрощения перехода на их библиотеку, Square имплементировали OkHttp используя интерфейсы HttpUrlConnection и Apache client.
OkHttp получила большое распространение и поддержку сообществом, и, в конце-концов, Google решили использовать версию 1.5 в Android 4.4 (KitKat). В июле 2015 Google официально признала AndroidHttpClient, основанный на Apache, устаревшим, вместе с выходом Android 5.1 (Lolipop).
Сегодня OkHttp поставляется со следующим огромным набором функций:
- Поддержка HTTP/2 и SPDY позволяет всем запросам, идущим к одному хосту, делиться сокетом
- Объединение запросов уменьшает время ожидания (если SPDY не доступен)
- Прозрачный GZIP позволяет уменьшить вес загружаемой информации
- Кэширование ответов позволяет избежать работу с сетью при повторных запросах.
- Поддержка как и синхронизированных блокирующих вызовов, так и асинхронных вызовов с обратным вызовом (callback)
Моя самая любимая часть OkHttp – как красиво и аккуратно можно работать с асинхронными запросами:
Это очень удобно, так как работа с сетью не должна быть в UI потоке. По-факту, начиная с Android 3.0 (Honeycomb, API 11), работа с сетью в отдельном потоке стала обязательной. Для того, чтобы воплотить что-то похожее с HtttpUrlConnection, вам потребуется построить большую (а может и монструозную) конструкцию с использованием AsyncTask или отдельного потока. Это будет еще более сложным, если вы захотите добавить отмену загрузки, объединение соединений и т.п.
Кстати, не осталась у обочины и HTTP библиотека от Google под названием Volley, которая предоставляет нам следующие бонусы:
- Автоматическое планирование сетевых запросов
- Множество параллельных сетевых соединений
- Прозрачное кэширование в памяти и на диске, в соответствии со стандартной кэш-согласованностью.
- Поддержка приоритизации запросов.
- Отмена API запросов. Вы можете отменить как один запрос, так и целый блок.
- Простота настройки, например, для повторов и отсрочек.
- Строгая очередность, которая делает легким корректное заполнение данными, полученными асинхронно из сети, интерфейса пользователя.
- Инструменты отладки и трассировки
Все, что ни есть в Volley, находится на вершине HttpUrlConnection. Если вы хотите получить JSON или изображение, то Volley имеет на это специальный абстракции, такие как ImageRequest и JsonObjectRequest, которые помогают вам в автоматическом режиме конвертировать полезную нагрузку HTTP. Так же достойно внимания то, что Volley использует жестко запрограммированный размер сетевого пула:
Когда OkHttp использует поток для каждого вызова с ThreadPoolExecutor с максимальным значением Integer.MAX_VALUE:
В результате, в большинстве случаев OkHttp будет действовать быстрее за счет использования бОльшего количества потоков. Если по каким-то причинам вы захотите использовать OkHttp вместе Volley, то есть реализация HttpStack, которая использует API запросов/ответов из OkHttp заместо HttpURLConnection.
HTTP клиенты продолжили развиваться для поддержки приложений с большим количеством картинок, особенно тех, кто поддерживает бесконечную прокрутку и трансформацию изображений. В то же время, REST API стал стандартом в индустрии, и каждый разработчик имел дело с такими типовыми задачами как сериализация в/из JSON и преобразование REST-вызовов в интерфейсы Java. Не прошло много времени, как появились библиотеки, решающие эти задачи:
- Retrofit – типобезопасный HTTP Android клиент для взаимодействия с REST-интерфейсами
- Picasso – мощная библиотека для загрузки и кэширования изображений под Android
Retrofit предоставляет некий мост между Java кодом и REST-интерфейсом. Он позволяет быстро включить в ваш проект HTTP API интерфейсы, и генерирует самодокументирующуюся реализацию.
В дополнение ко всему, Retrofit поддерживает конвертацию в JSON, XML, протокол буферов (protocol buffers).
Picasso, с другой стороны, предоставляет HTTP библиотеку, ориентированную на работу с изображениями. Например, вы можете загрузить изображение в свой View с помощью одной строчки:
Picasso и Retrofi настроены так, чтобы использовать OkHttpClient как стандартный HTTP клиент. Однако, если хотите, вы можете указать клиентом HttpURLConnection.
Glide – что-то похожее на Picasso. Он предоставляет некоторые дополнительные функции, такие как GIF-анимация, генерация миниатюрных эскизов изображения и неподвижные видео. Полное сравнение можно найти здесь.
Facebook недавно открыли общественности исходный код библиотеки Fresco, которую они используют в своем мобильном приложении. Одна из ключевых функций, которая выделяет ее, — кастомная стратегия выделения памяти для bitmap’ов, чтобы избежать работы долгого GC (сборщик мусора). Fresco выделяет память в регионе, который называется ashmem. Используются некие трюки, чтобы иметь доступ к этому региону памяти доступ как из части, написанной на C++, так и из части на Java. Чтобы уменьшить потребление CPU и данных из сети, эта библиотека использует 3 уровня кэша: 2 в ОЗУ, третий во внутреннем хранилище.
Я нашел необходимым показать отношения между библиотеками на одной схеме. Как вы можете увидеть, HTTP всегда остается внизу у высокоуровневых библиотек. Вы можете выбирать между простым HttpUrlConnection или последним OkHttpClient. Мы используем эту совместимость при разработке PacketZoom Android SDK, о котором мы поговорим в следующем посте.
Недавно мы сравнивали между собой HTTP библиотеки по производительности, но эта тема заслужила отдельного рассмотрения. Мы надеемся, что этот обзор дал вам основные идеи о плюсах и минусах каждой библиотеки, и мы помогли вам сделать правильный выбор. Следите за выходом более интересных постов о сетевой работе в Android от нас.
Источник
Сделайте HTTP-запрос с android
Я искал везде но не мог найти ответа, есть ли способ сделать простой HTTP-запрос? Я хочу запросить PHP-страницу / скрипт на одном из моих сайтов, но я не хочу показывать веб-страницу.
Если возможно, я даже хочу сделать это в фоновом режиме (в BroadcastReceiver)
11 ответов
обновление
это очень старый ответ. Я определенно больше не буду рекомендовать клиента Apache. Вместо этого используйте либо:
Оригинальный Ответ
прежде всего, запросите разрешение на доступ к сети, добавьте в манифест следующее:
тогда самый простой способ-использовать http-клиент Apache в комплекте с Android:
если вы хотите, чтобы он работал в отдельном потоке, я бы рекомендовал расширить AsyncTask:
затем вы можете сделать запрос по:
Если у вас нет явной причины выбрать Apache HttpClient, вы должны предпочесть java.сеть.URLConnection. вы можете найти множество примеров того, как использовать его в интернете.
мы также улучшили документацию Android с момента вашего первоначального сообщения:http://developer.android.com/reference/java/net/HttpURLConnection.html
Примечание: HTTP-клиент Apache в комплекте с Android теперь устарел в пользу HttpURLConnection. Пожалуйста, смотрите Android разработчиков блог для получения более подробной информации.
добавить к вашему манифесту.
затем вы получите веб-страницу следующим образом:
Я также предлагаю запустить его в отдельном потоке:
посмотреть документация для получения дополнительной информации об обработке ответов и POST запросы.
самый простой способ-использовать Android lib под названием волейбол
Volley предлагает следующие преимущества:
автоматическое планирование сетевых запросов. несколько параллельных сети соединения. Прозрачный диск и кэширование ответа памяти c стандартная согласованность кэша HTTP. Поддержка приоритизации запросов. API запроса на отмену. Вы можете отменить один запрос, или вы можете установить блоки или области запросы на отмену. Простота настройки для например, для retry и backoff. Сильный заказ, что позволяет легко правильно заполнить интерфейса извлечена данные асинхронно с сеть. Инструменты отладки и трассировки.
вы можете отправить запрос http / https так просто:
в этом случае вам не нужно рассматривать «запуск в фоновом режиме» или «использование кэша», поскольку все это уже было сделано Volley.
Источник
Android OkHttp3 Http Get Post Request Example
This example will show you how to use OkHttp3 to send get or post HTTP request to a web server and how to parse and display response text in an Android TextView.
1. OKHttp Characters.
- OkHttp3 is a third-party open-source library that is contributed by the square company. It has below characters.
- User-friendly API.
- Support http2, sharing the same socket for all requests from a machine.
- Built-in connection pool, support for connection reuse, and reduction of delay.
- Supports transparent gzip compression response.
- Avoid duplicate requests by caching.
- Automatically retry the host’s other IP and redirect automatically when the request fails.
2. Add OkHttp3 Library In build.gradle.
- Before you can use the OkHttp3 library, you need to add dependencies in the build.gradle file in android studio as below.
- You can get the most recent build library from https://github.com/square/okhttp.
- After adding the below code, you need to click the Sync Now link in the top right corner to sync the project.
2. Use OkHttp3 To Create HTTP Get Request Method Call Object.
- The below source code snippet will use the OkHttp3 library to create an HTTP GET request.
3. Use OkHttp3 To Create HTTP Post Request Method Call Object.
- The below source code snippet will use the OkHttp3 library to create an HTTP POST request.
4. Send Http Request Synchronously And Asynchronously.
- You can send HTTP GET or POST requests with OkHttp3 synchronously or asynchronously.
- When you send the request synchronously, you need to run the code in a child thread because the process may take a long time.
- When you send the request asynchronously, the system will create a child thread and run OkHttp3 code in it automatically.
5. OkHttp Get Post Request Example.
Источник
Как отправлять HTTP-запросы на Java
Автор: David Landup
Дата записи
Вступление
Протокол передачи гипертекста (HTTP)-это протокол прикладного уровня, который, без преувеличения, в значительной степени является основой просмотра Интернета в том виде, в каком мы его знаем.
Он используется для передачи документов гипермедиа между клиентом и сервером и является неотъемлемой частью каждого отдельного веб-приложения, включая любые API, использующие архитектуру REST.
Это позволяет браузеру взаимодействовать с сервером, отправляя запросы на определенные документы, будь то HTML-документы (возвращаемые в виде страниц, которые мы видим) или гипермедиа (изображения, видео и т.д.), Которые отображаются на страницах.
Как Работает HTTP?
Когда мы решаем посетить веб-сайт, за кулисами происходит то, что наш компьютер генерирует и отправляет запрос на сервер, на котором размещен веб-сайт.
HTTP-запрос может выглядеть примерно так:
Здесь мы запрашиваем , чтобы сервер отправил обратно страницу по URL-адресу stackabuse.com/tag/java/ использование HTTP версии 1.1.
Сервер должен ответить примерно так:
За этим следует ответный орган :
Затем тело ответа будет отображено в нашем браузере, и нас встретит страница!
Помимо кода состояния HTTP/1.1 200 OK , который мы получили в качестве ответа, есть еще несколько других, с которыми вы, вероятно, сталкивались в своей повседневной жизни:
- 1xx : Любой статус, начинающийся с “1”, является информационным статусом. Запрос получен и находится в стадии обработки.
- 2xx : Любой статус, начинающийся с “2”, означает, что запрос был успешным . В большинстве случаев это 200 ОК , что просто означает, что все прошло гладко.
- 3xx : Любой статус, начинающийся с “3”, означает, что пользователь должен быть перенаправлен для завершения действия.
- 4xx : Любой статус, начинающийся с “4”, указывает на ошибку клиента . Самый печально известный из них – 404 Не найден , обычно из-за неправильного запроса или синтаксиса. Наряду с этим, есть 400 Плохих запросов , 401 Несанкционированный и 403 Запрещенных . Эти коды статуса являются наиболее распространенными, и их существует широкий спектр.
- 5xx : Любое состояние, начинающееся с “5”, указывает на ошибку сервера .
полный список кодов состояния HTTP довольно длинный, хотя неплохо бы его просмотреть.
Отправка запросов с помощью HttpURLConnection
HttpURLConnection – это базовый класс Java для обработки HTTP-запросов и ответов.
Использование HttpURLConnection идеально подходит для простых HTTP-запросов, хотя, если вы хотите проще добавлять такие вещи, как заголовки или аутентификацию, вам будет проще полагаться на другие библиотеки, такие как Apache Commons. ССЫЛКА НА СТАТЬЮ APACHE ЗДЕСЬ
Самый простой способ создать экземпляр объекта HttpURLConnection – это использовать объект URL :
Типы запросов
Теперь, когда наш Экземпляр HttpURLConnection существует, мы можем определить для него тип HTTP-запроса:
Хотя в большинстве случаев вы будете использовать только GET , POST и DELETE .
Параметры запроса
В некоторых случаях мы хотели бы отправить HTTP-запрос с определенными параметрами запроса, такими как www.youtube.com/watch?v=dQw4w9WgXcQ .
Чтобы достичь этого, мы обычно придумываем способ сопоставить эти значения. Иногда люди определяют свои собственные классы для хранения этих значений с помощью простого Хэш-карты все будет в порядке:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Теперь, когда мы сопоставили наши параметры, нам нужно сделать пару вещей, чтобы подготовить их к нашему запросу:
- Создайте параметр в строковом формате. Мы будем использовать StringBuilder , так как он идеально подходит для объединения, которое мы будем выполнять
- Используйте класс URLEncoder для кодирования наших параметров
- Преобразуйте данные в байты, так как наш Поток вывода данных , который запускает запрос, ожидает массив типа байт
Примечание : Если вы не уверены, зачем нам нужно кодировать ваш URL – адрес-это потому, что некоторые символы могут иметь особое значение в URL-адресах. Такие персонажи, как “/”, “.”, “#” , и “?” может изменить запрос, поэтому, если они присутствуют, нам нужно закодировать их таким образом, чтобы это не повлияло на интерпретацию URL-адреса.
Давайте реализуем пункты из списка:
И, таким образом, наш параметр готов к использованию в запросе.
Заголовки запросов
Если вы хотите добавить заголовок к запросу, это так же просто, как:
И если вы хотите прочитать заголовок запроса:
Тайм-ауты
Еще одна особенность HttpURLConnection предложения устанавливает тайм-ауты . Мы можем определить интервалы ожидания для чтения или подключения:
Интервалы, как обычно, определяются в миллисекундах.
Так, например, время ожидания соединения истекает, если оно не может быть установлено в течение 10 секунд. Аналогично, это также приведет к тайм-ауту, если данные не могут быть считаны из соединения в течение 10 секунд.
ОТПРАВИТЬ запрос
С вашим запросом все готово, мы можем продолжить и отправить СООБЩЕНИЕ запрос:
Здесь мы отправляем postDataBytes в наш POST запрос, который представляет собой массив байтов. Ознакомьтесь с демонстрацией ниже для получения более подробной информации о том, как это создать.
ПОЛУЧИТЬ запрос
Как только мы отправляем запрос POST , мы обычно хотим что-то сделать (или, по крайней мере, просмотреть) ответ.
Запросы GET предназначены только для извлечения данных, поэтому давайте продолжим и получим ответ:
На этом этапе мы можем извлечь множество различных видов информации из соединения :
Демонстрация
Вот как очень простое приложение сгенерирует запрос POST , отправит его, а затем прочитает ответ:
Запуск этого фрагмента кода, безусловно, достаточно, чтобы получить исходный код страницы, которую мы указали для получения:
Вывод
Протокол передачи гипертекста (HTTP)-это протокол прикладного уровня, который, без преувеличения, является очень большим и важным компонентом для интернет-приложений.
HttpURLConnection – это базовый класс Java для обработки HTTP-запросов и ответов.
Использование HttpURLConnection идеально подходит для простых HTTP-запросов, хотя, если вы хотите создавать более сложные HTTP-запросы с заголовками или аутентификацией, у вас будет гораздо более простой опыт работы с такими библиотеками, как Apache Commons. ССЫЛКА НА СТАТЬЮ APACHE ЗДЕСЬ
Источник