==============
Java — ещё один вариант сетевого фреймворка.
Не работает в GITOSC
easy-okhttp
— это оболочка над OkHttp, сетевым фреймворком, предоставляющая функции загрузки и скачивания файлов, отправки форм (включая загрузку файлов), цепочечных вызовов, поддержки HTTPS и пользовательских сертификатов подписи и т.д.
Популярность OkHttp на платформе Android началась давно, но в бэкэнде Java всё ещё доминирует Apache HttpClient. Этот фреймворк очень мощный, но его недостатком является сложность дизайна и большой размер jar-файла.
Поэтому появился проект easy-okhttp
, основная цель которого — отказаться от использования Apache HttpClient и помочь распространению OkHttp.
okio
. Размер фреймворка составляет менее 500 Кб.mzlion-core
: зависимости проекта, которые зависят от slf4j-api
и gson
. Размер этих фреймворков составляет около 400 Кб.Таким образом, общий размер пакета easy-okhttp
составляет примерно 1 Мб, что значительно меньше размера Apache HttpClient, а также более удобно в использовании.
[mzllon@qq.com](mailto:mzllon@qq.com)
Для использования 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:
Фреймворк автоматически считывает файл конфигурации 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(?)
.HttpClient.Instance.customSSL()
.HttpClient.Instance.customSSL(HttpClient.class.getClassLoader().getResourceAsStream("mzlion_com.cer"))
.HttpClient.Instance.customSSL()
, HttpClient.Instance.customSSL(InputStream pfxStream, char[] pfxPwd, InputStream... certificates)
. String responseData = HttpClient
// Метод запроса и URL запроса
.get("http://localhost:8080/user-sys/user/list")
.asString();
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;
Эта функция позволяет преобразовать исходный формат данных в требуемый формат для бизнес-целей. Фреймворк предоставляет стандартные реализации интерфейса обработчика, но если они не соответствуют требованиям, можно создать собственный обработчик.
Рассмотрим более продвинутые настройки:
Асинхронные запросы не блокируют текущий поток (особенно при медленном сетевом соединении), что подходит для ситуаций, когда результаты не важны или не нужны немедленно, например, для уведомлений или 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 )