1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mzllon-easy-okhttp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

easy-okhttp

==============

Maven Central License

Java — ещё один вариант сетевого фреймворка.

Документация (нажмите для быстрого перехода)

Не работает в GITOSC

Введение

easy-okhttp — это оболочка над OkHttp, сетевым фреймворком, предоставляющая функции загрузки и скачивания файлов, отправки форм (включая загрузку файлов), цепочечных вызовов, поддержки HTTPS и пользовательских сертификатов подписи и т.д.

Популярность OkHttp на платформе Android началась давно, но в бэкэнде Java всё ещё доминирует Apache HttpClient. Этот фреймворк очень мощный, но его недостатком является сложность дизайна и большой размер jar-файла.

Поэтому появился проект easy-okhttp, основная цель которого — отказаться от использования Apache HttpClient и помочь распространению OkHttp.

Зависимости

  • OkHttp: ядро проекта, которое зависит от okio. Размер фреймворка составляет менее 500 Кб.
  • mzlion-core: зависимости проекта, которые зависят от slf4j-api и gson. Размер этих фреймворков составляет около 400 Кб.

Таким образом, общий размер пакета easy-okhttp составляет примерно 1 Мб, что значительно меньше размера Apache HttpClient, а также более удобно в использовании.

Контакты

  • Электронная почта: [mzllon@qq.com](mailto:mzllon@qq.com)
  • Группа QQ: QQ больше не используется, можно рассмотреть возможность присоединения к группе WeChat.
  • Группа WeChat: easy-okhttp группа общения

Использование фреймворка

Для использования easy-okhttp требуется поддержка JDK версии 7 или выше. Если вы всё ещё используете JDK ниже версии 7, рекомендуется обновить версию как можно скорее.

Maven:

<dependency>
    <groupId>com.mzlion</groupId>
    <artifactId>easy-okhttp</artifactId>
    <version>1.1.0</version>
</dependency>

Gradle:

compile 'com.mzlion:easy-okhttp:1.1.0'

Скачать jar:

Характеристики фреймворка

  • Поддержка GET и POST запросов.
  • На основе POST возможна загрузка больших текстовых данных и двоичных файлов через HTTP Body.
  • Обычная отправка форм.
  • Отправка форм с файлами.
  • В формах поддерживается установка параметров с одинаковыми именами, то есть сервер получает массив или коллекцию.
  • Поддерживается сохранение сеанса.
  • Цепочечные вызовы поддерживаются.
  • Доступ к HTTPS с поддержкой доверенных сертификатов и настраиваемых сертификатов подписи.
  • Рекомендуется использовать режим отладки для разработки.
  • Добавлена поддержка асинхронных запросов.
  • Предоставлен обработчик данных для лёгкого преобразования данных в желаемый результат.
  • И многое другое.

Глобальная конфигурация

Фреймворк автоматически считывает файл конфигурации easy-okhttp.properties из classpath. Если нет особых требований, обычно нет необходимости перезаписывать этот файл конфигурации.

  • Файл конфигурации easy-okhttp.properties:
    • connectTimeout: время ожидания соединения, по умолчанию 10 секунд.
    • readTimeout: время ожидания чтения содержимого, по умолчанию 30 секунд.
    • writeTimeout: время ожидания записи содержимого, по умолчанию 30 секунд.
  • Если необходимо изменить эти значения по умолчанию, есть два способа:
    • Перезаписать предоставленный файл конфигурации easy-okhttp.properties. Фреймворк отдаёт приоритет файлу конфигурации в проекте, а единицей времени ожидания является секунда.
    • Установить глобальные параметры через код.
  • Также можно установить глобальные параметры через код, эта операция настройки должна быть выполнена только один раз, поэтому её можно поместить в конфигурацию запуска проекта.
    • Установка времени ожидания подключения: HttpClient.Instance.setConnectTimeout(int).
    • Настройка времени ожидания чтения: HttpClient.Instance.setReadTimeout(int).
    • Настройка времени ожидания записи: HttpClient.Instance.writeTimeout(int).
    • Настройка пользовательского сертификата подписи: HttpClient.Instance.customSSL(?).
    • Настройка заголовка по умолчанию: HttpClient.Instance.setDefaultHeader(?).
  • Конфигурация SSL-сертификата В 2017 году уровень активности SSL был очень высоким, поэтому были добавлены однонаправленная аутентификация HTTPS и двусторонняя аутентификация. Конфигурацию HTTPS необходимо настроить с помощью кода.
    • Если сайт использует HTTPS, и сертификат выпущен доверенным корневым центром сертификации CA, фреймворк будет доверять сертификату автоматически, без дополнительной настройки.
    • Игнорировать HTTPS, то есть клиент не выполняет проверку, крайне не рекомендуется использовать таким образом, вызовите метод HttpClient.Instance.customSSL().
    • Использовать самозаверяющий сертификат (например, классический веб-сайт 12306) или систему, которая не может автоматически доверять SSL-сертификатам (например, Let's Encrypt), вызовите метод HttpClient.Instance.customSSL(HttpClient.class.getClassLoader().getResourceAsStream("mzlion_com.cer")).
    • Наиболее строгой является двусторонняя аутентификация, вызовите методы HttpClient.Instance.customSSL(), HttpClient.Instance.customSSL(InputStream pfxStream, char[] pfxPwd, InputStream... certificates).

Основные примеры

1. Обычный GET-запрос без параметров

    String responseData = HttpClient
                // Метод запроса и URL запроса
                .get("http://localhost:8080/user-sys/user/list") 
                .asString();

2. Обычный GET-запрос с параметрами

    String responseData = HttpClient
                // Метод запроса и URL запроса
                .get("http://localhost:8080/user-sys/user/list")
                // Установка параметров запроса
                .queryString("mobile","18018110018")
``` **asByteData()** преобразует ответ в двоичные данные, которые представляют собой исходные данные сетевого запроса.

**public void asFile(File saveFile)** сохраняет ответ в файл. Этот метод полезен, когда удалённый ресурс является файлом.

**public void asStream(OutputStream out)** выводит ответ непосредственно в другой поток.

**public <T> T custom(DataHandler<T> dataHandler)** позволяет настроить обработку ответа, если предыдущие методы не удовлетворяют требованиям. Можно использовать этот метод для самостоятельной обработки данных.

Ниже приведены примеры кода, где эти методы используются:

```java
    // Преобразуем ответ в строку и выводим её
    String responseData = httpResponse.asString();

    // Сохраняем ответ в файле
    File frc = new File("d:\\web\\save.txt");
    httpResponse.asFile(frc);

    // Используем JSON-конвертер
    List<Person> personList = httpResponse.asBean(new TypeToken<List<Person>>(){});
    // Перегружаем метод
    // Person person = httpResponse.asBean(Person.class);

    // Выводим ответ в поток
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    httpResponse.asStream(baos);

Теперь рассмотрим использование HTTPS:

Ранее уже упоминалось о настройке HTTPS. Ниже приведены простые примеры, чтобы лучше понять, как это работает:

    // Если сертификат выпущен доверенным центром сертификации, таким как GitHub, то фреймворк не требует дополнительных действий, и можно использовать его как обычно
    String githubContent = HttpClient
        .get("https://www.mzlion.com")
        .asString();

    // Независимо от того, какой сертификат используется, просто игнорируем HTTPS
    String mzlionIndexContent = HttpClient
        .get("https://kyfw.12306.cn/otn/")
        .customSSL()
        .asString();

    // Если SSL-сертификат самоподписан или программа не признаёт фактическую безопасность, можно указать клиентский сертификат
    String mzlionIndexContent = HttpClient
        .get("https://kyfw.12306.cn/otn/")
        .customSSL(this.getClass().getClassLoader().getResourceAsStream("SRCA.cer"))
        .asString();

Далее рассмотрим DataHandler, который представляет собой новый функционал с функцией обработки данных:

Этот интерфейс имеет только одну функцию:

T handle(final okhttp3.Response response) throws IOException;

Эта функция позволяет преобразовать исходный формат данных в требуемый формат для бизнес-целей. Фреймворк предоставляет стандартные реализации интерфейса обработчика, но если они не соответствуют требованиям, можно создать собственный обработчик.

  • StringDataHandler — обработчик строк, который часто используется и может быть вызван напрямую через StringDataHandler.create().
  • JsonDataHandler — обработчик JSON, который также часто используется и преобразует строку JSON в объект JavaBean.
  • FileDataHandler — обработчик файлов, который сохраняет результат в файл. У этого обработчика есть два параметра конструктора: обязательный путь к каталогу (dirPath) и необязательное имя файла (filename). Если filename не указано, фреймворк автоматически получает его из заголовка или URL. Если получить не удаётся, генерируется случайное имя файла.

Рассмотрим более продвинутые настройки:

Асинхронные запросы

Асинхронные запросы не блокируют текущий поток (особенно при медленном сетевом соединении), что подходит для ситуаций, когда результаты не важны или не нужны немедленно, например, для уведомлений или push-уведомлений.

При выполнении асинхронного запроса есть небольшое отличие от синхронного запроса, но в остальном они идентичны.

Пример асинхронного запроса:

            .get("https://www.github.com")
            .execute(new CallbackAdaptor<String>(){
                
                @Override
                public DataHandler<String> getDataHandler() {
                    return StringDataHandler.create();
                }
            
                @Override
                public void onSuccess(String data) {
                    //data就是经过处理后的数据,直接在这里写自己的业务逻辑
                }
            });```

### Интерфейс обратного вызова Callback

Callback — это интерфейс обратного вызова, который определяет 6 функций. Каждая функция вызывается в определённом порядке.

* onBefore() — вызывается первой перед запросом сети. Эта функция имеет возвращаемое значение, и если она возвращает false, запрос будет остановлен.
* postProgress() — вызывается второй для уведомления о ходе загрузки.
* onError() — вызывается третьей только при неудачном запросе.
* onComplete() — вызывается четвёртой после завершения запроса интерфейса.
* onSuccess() — вызывается пятой после успешного запроса интерфейса (HTTP-статус равен 200). Эта функция зависит от другой функции getDataHandler(), которая возвращает указанный обработчик данных для обработки исходных данных. Для обработчиков данных ранее было представлено подробное описание.

Для асинхронных обратных вызовов CallbackAdaptor предоставляет пустую реализацию класса. Если необходимо отслеживать выполнение определённой функции, можно перегрузить эту функцию.

### Установка тайм-аута для отдельного запроса

Если необходимо установить время ожидания соединения, чтения или записи для отдельного запроса, это можно сделать перед выполнением метода execute(). Основные методы для этого:

* connectTimeout(int) — время ожидания подключения.
* readTimeout(int) — время ожидания чтения.
* writeTimeout(int) — время ожидания записи.
* customSSL() — настройка сертификата HTTPS.

## Использование одного экземпляра OkHttpClient

В большинстве проектов требуется только один запрос к удалённому сервису, поэтому эти настройки можно выполнить в глобальной конфигурации, используя общий экземпляр OkHttpClient. Вызов этих методов приведёт к созданию нового экземпляра OkHttpClient (аналогично открытию нового браузера).

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Это оболочка для Java-фреймворка okhttp3, предоставляющая более удобный способ вызова. Цель — заменить неудобный Apache HttpClient. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mzllon-easy-okhttp.git
git@api.gitlife.ru:oschina-mirror/mzllon-easy-okhttp.git
oschina-mirror
mzllon-easy-okhttp
mzllon-easy-okhttp
master