Android http client https

HttpClient for Android

Google Android 1.0 was released with a pre-BETA snapshot of Apache HttpClient. To coincide with the first Android release Apache HttpClient 4.0 APIs had to be frozen prematurely, while many of interfaces and internal structures were still not fully worked out. As Apache HttpClient 4.0 was maturing the project was expecting Google to incorporate the latest code improvements into their code tree. Unfortunately it did not happen. Version of Apache HttpClient shipped with Android has effectively become a fork.

Eventually Google decided to discontinue further development of their fork while refusing to upgrade to the stock version of Apache HttpClient citing compatibility concerns as a reason for such decision. Google completely removed their fork of Apache HttpClient from Android in version 8.0 (API 26) only.

Those users who want to continue using Apache HttpClient on Android are advised to consider

Apache HttpCLient 5.0 stock version, which works well with Android API 19 and newer

Apache HttpClient packages for Android maintained by Marek Sebera when targeting Android API 23 and newer

Android extensions for Apache HttpClient 4.5 when targeting Android API 26 or newer.

Android extensions for Apache HttpClient provide a replacement for the default HostnameVerifier implementation incompatible with Android and provide a builder for PoolingHttpClientConnectionManager instances optimized for Android called AndroidHttpClientConnectionManagerBuilder .

Источник

HttpClient Stack и селектор реализации SSL/TLS для Android

Селекторы реализации HttpClient Stack и SSL/TLS определяют реализацию HttpClient и SSL/TLS, которая будет использоваться приложениями Xamarin. Android.

Проекты должны ссылаться на сборку System .NET. http .

Апрель 2018 — из-за повышенных требований к безопасности, включая соответствие требованиям PCI, основным поставщикам облачных услуг и веб-серверам требуется отключить поддержку протоколов TLS версий старше 1,2. проекты Xamarin, созданные в предыдущих версиях Visual Studio умолчанию для использования более старых версий TLS.

Чтобы ваши приложения продолжали работать с этими серверами и службами, необходимо обновить проекты Xamarin с помощью Native TLS 1.2 параметров и, приведенных ниже, а затем повторно создать и повторно развернуть приложения для пользователей.

конфигурация HttpClient Xamarin. Android находится в Project параметры Android, а затем нажмите кнопку дополнительные параметры .

Ниже приведены рекомендуемые параметры для поддержки TLS 1,2.

конфигурация HttpClient Xamarin. Android находится в Project параметры сборки Android параметры > сборки и перейдите на вкладку > .

Ниже приведены рекомендуемые параметры для поддержки TLS 1,2.

Альтернативные параметры конфигурации

андроидклиенсандлер

Андроидклиенсандлер — это новый обработчик, который делегирует собственный код Java/OS вместо реализации всех элементов в управляемом коде. Это желательно сделать.

Плюсы

  • Используйте собственный API для повышения производительности и меньшего размера исполняемого файла.
  • Поддержка новейших стандартов, например TLS 1,2.

Минусы

  • Требуется Android 4,1 или более поздней версии.
  • Некоторые функции и параметры HttpClient недоступны.

Управляемый (HttpClientHandler)

Управляемый обработчик — это полностью управляемый обработчик HttpClient, который поставлялся с предыдущими версиями Xamarin. Android.

Плюсы

  • Он является наиболее совместимым (функциями) с MS .NET и более старыми версиями Xamarin.

Минусы

  • Он не полностью интегрирован с операционной системой (например, ограничено TLS 1,0).
  • Обычно это происходит намного медленнее (например, шифрование), чем собственный API.
  • Для этого требуется более управляемый код, создавая более крупные приложения.
Читайте также:  Булки кефир рок н ролл android

Выбор обработчика

Выбор между AndroidClientHandler и HttpClientHandler зависит от потребностей вашего приложения. AndroidClientHandler рекомендуется использовать для обеспечения актуальной поддержки безопасности, например.

  • Требуется поддержка TLS 1.2 +.
  • Ваше приложение предназначено для Android 4,1 (API 16) или более поздней версии.
  • Требуется поддержка TLS 1.2 + для HttpClient .
  • Поддержка TLS 1.2 + для не требуется WebClient .

HttpClientHandler является хорошим выбором, если требуется поддержка TLS 1.2 +, но она должна поддерживать версии Android более ранней, чем Android 4,1. Это также хороший вариант, если требуется поддержка TLS 1.2 + для WebClient .

Начиная с Xamarin. Android 8,3, HttpClientHandler по умолчанию используется скучный протокол SSL ( btls ) в качестве базового поставщика TLS. Скучный поставщик SSL TLS предоставляет следующие преимущества:

  • Он поддерживает TLS 1.2 +.
  • Она поддерживает все версии Android.
  • Он обеспечивает поддержку TLS 1.2 + для HttpClient и WebClient .

Недостатком использования скучных протоколов SSL в качестве поставщика ундерлинг TLS является то, что он может увеличить размер результирующего APK (он добавляет около 1 МБ дополнительного APK размера для каждого поддерживаемого ABI).

Начиная с Xamarin. Android 8,3, поставщик TLS по умолчанию является скучным протоколом SSL ( btls ). Если вы не хотите использовать скучный протокол SSL, можно вернуться к управляемой реализации SSL с предысторией, задав $(AndroidTlsProvider) для свойства значение legacy (Дополнительные сведения о настройке свойств сборки см. в разделе $(AndroidTlsProvider) ).

Программное использование AndroidClientHandler

Xamarin.Android.Net.AndroidClientHandler Является HttpMessageHandler реализацией специально для Xamarin. Android. Экземпляры этого класса будут использовать собственную java.net.URLConnection реализацию для всех HTTP-соединений. Теоретически это обеспечит увеличение производительности HTTP и небольших размеров APK.

Этот фрагмент кода является примером явного указания одного экземпляра HttpClient класса:

Базовое устройство Android должно поддерживать TLS 1,2 (IE. Android 4,1 и более поздние версии). Обратите внимание, что официальная поддержка TLS 1,2 находится в Android 5.0 +. Однако некоторые устройства поддерживают TLS 1,2 в Android 4.1 +.

Параметр сборки реализации SSL/TLS

Этот параметр проекта определяет, какая базовая библиотека TLS будет использоваться всеми веб-запросами, HttpClient и WebRequest . По умолчанию выбран TLS 1,2:

Если для реализации HttpClient задано значение Managed , а в качестве реализации TLS задано значение native TLS 1.2 +, то объект будет автоматически использовать управляемые и TLS 1,2 (предоставляемые библиотекой борингссл) для своих HTTP-запросов.

Однако если для реализации HttpClient задано значение , то все HttpClient объекты будут использовать базовый класс Java java.net.URLConnection и не будут ЗАТРОНУТЫ значением HttpClient . WebRequest объекты будут использовать библиотеку Борингссл.

Другие способы управления конфигурацией SSL/TLS

Существует три способа, которыми приложение Xamarin. Android может управлять параметрами TLS:

  1. выберите реализацию HttpClient и библиотеку TLS по умолчанию в параметрах Project.
  2. Программно с помощью Xamarin.Android.Net.AndroidClientHandler .
  3. Объявите переменные среды (необязательно).

Из трех вариантов рекомендуемый подход заключается в использовании параметров проекта Xamarin. Android для объявления по умолчанию HttpMessageHandler и TLS для всего приложения. Затем при необходимости программно создать экземпляры Xamarin.Android.Net.AndroidClientHandler объектов. Эти параметры описаны выше.

Третий вариант — использование переменных среды — описывается ниже.

Объявить переменные среды

Существует две переменные среды, связанные с использованием протокола TLS в Xamarin. Android:

XA_HTTP_CLIENT_HANDLER_TYPE — Эта переменная среды объявляет значение по умолчанию HttpMessageHandler , которое будет использоваться приложением. Например:

Читайте также:  Ufc для android взломанную

XA_TLS_PROVIDER — Эта переменная среды будет объявлять, какая библиотека TLS будет использоваться btls legacy :, или default (которая совпадает с отсутствием этой переменной).

Эта переменная среды задается путем добавления файла среды в проект. Файл среды — это обычный текстовый файл в формате UNIX с действием сборки андроиденвиронмент:

Дополнительные сведения о переменных среды и Xamarin. Android см. в разделе с руководством по среде Xamarin. Android .

Источник

Какую библиотеку работы с 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 поставляется со следующим огромным набором функций:

  1. Поддержка HTTP/2 и SPDY позволяет всем запросам, идущим к одному хосту, делиться сокетом
  2. Объединение запросов уменьшает время ожидания (если SPDY не доступен)
  3. Прозрачный GZIP позволяет уменьшить вес загружаемой информации
  4. Кэширование ответов позволяет избежать работу с сетью при повторных запросах.
  5. Поддержка как и синхронизированных блокирующих вызовов, так и асинхронных вызовов с обратным вызовом (callback)

Моя самая любимая часть OkHttp – как красиво и аккуратно можно работать с асинхронными запросами:

Это очень удобно, так как работа с сетью не должна быть в UI потоке. По-факту, начиная с Android 3.0 (Honeycomb, API 11), работа с сетью в отдельном потоке стала обязательной. Для того, чтобы воплотить что-то похожее с HtttpUrlConnection, вам потребуется построить большую (а может и монструозную) конструкцию с использованием AsyncTask или отдельного потока. Это будет еще более сложным, если вы захотите добавить отмену загрузки, объединение соединений и т.п.

Кстати, не осталась у обочины и HTTP библиотека от Google под названием Volley, которая предоставляет нам следующие бонусы:

  1. Автоматическое планирование сетевых запросов
  2. Множество параллельных сетевых соединений
  3. Прозрачное кэширование в памяти и на диске, в соответствии со стандартной кэш-согласованностью.
  4. Поддержка приоритизации запросов.
  5. Отмена API запросов. Вы можете отменить как один запрос, так и целый блок.
  6. Простота настройки, например, для повторов и отсрочек.
  7. Строгая очередность, которая делает легким корректное заполнение данными, полученными асинхронно из сети, интерфейса пользователя.
  8. Инструменты отладки и трассировки
Читайте также:  Сделать длинный скриншот андроид huawei

Все, что ни есть в 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. Не прошло много времени, как появились библиотеки, решающие эти задачи:

  1. Retrofit – типобезопасный HTTP Android клиент для взаимодействия с REST-интерфейсами
  2. 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 от нас.

Источник

Оцените статью