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

OSCHINA-MIRROR/HarmonyOS-tpc-okhttputils

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

okhttp-utils

изначально взят с https://github.com/hongyangAndroid/okhttputils

Классы для работы с okhttp, okhttp доступен по адресу: https://github.com/square/okhttp.

Совместим с версией okhttp 3.14.9.

Внешняя зависимость Gradle

dependencies {
    implementation 'io.openharmony.tpc.thirdlib:okhttputils:1.0.1'
}

Обеспеченные возможности

  • Обычные GET запросы
  • Обычные POST запросы
  • Отправка файлов через HTTP POST (похоже на формы)
  • Загрузка файлов / загрузка изображений
  • Обратные вызовы для отслеживания прогресса загрузки и отправки
  • Поддержка отмены конкретного запроса
  • Поддержка пользовательских Callback
  • Поддержка методов HEAD, DELETE, PATCH, PUT
  • Поддержка сохранения сессий
  • Поддержка доступа к сайту HTTPS с самоподписанным сертификатом, позволяет установку сертификата

Настройка OkHttpClient

По умолчанию будет использоваться конфигурация OkHttpClient по умолчанию. Если вы хотите использовать какую-либо другую конфигурацию, используйте метод initClient в AbilityPackage.

public class MyHapPackage extends AbilityPackage {
    @Override
    public void onInitialize() {
        super.onInitialize();

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
//                .addInterceptor(new LoggerInterceptor("TAG"))
                .connectTimeout(10000L, TimeUnit.MILLISECONDS)
                .readTimeout(10000L, TimeUnit.MILLISECONDS)
                // Другие настройки
                .build();

        OkHttpUtils.initClient(okHttpClient);
    }
}

Не забудьте указать это в config.json.## Для работы с cookies (включая сессии)

Для работы с cookies также можно воспользоваться методом cookiejar. Процесс настройки аналогичен приведённому выше примеру.

CookieJarImpl cookieJar = new CookieJarImpl(new PersistentCookieStore(getApplicationContext()));
OkHttpClient okHttpClient = new OkHttpClient.Builder()
      .cookieJar(cookieJar)
      // Другие настройки
     .build();

OkHttpUtils.initClient(okHttpClient);

Проект включает:

  • PersistentCookieStore // Сохранение cookies
  • SerializableHttpCookie // Сохранение cookies
  • MemoryCookieStore // Хранение информации о cookies в памяти

Если возникнут проблемы, обратитесь за помощью, а также можете реализовать интерфейс CookieJar и написать свой код управления cookies.

Кроме того, для сохранения cookies можно использовать https://github.com/franmontiel/PersistentCookieJar. Эквивалентно тому, что в рамках предоставляются несколько реализованных классов, и вы можете самостоятельно настроить или выбрать использовать.

Для логгирования

При инициализации OkHttpClient это достигается путём установки interceptors, в рамках которого предоставлен LoggerInterceptor. Конечно, вы также можете создать свой собственный interceptor.

OkHttpClient okHttpClient = new OkHttpClient.Builder()
       .addInterceptor(new LoggerInterceptor("TAG"))
        // Другие конфигурации
        .build();
OkHttpUtils.initClient(okHttpClient);

Для HTTPS

Опять же, это достигается через конфигурацию, где в рамках предоставлена библиотека HttpsUtils.* Установка доступа ко всем HTTPS сайтам:

HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
         // Другие конфигурации
         .build();
OkHttpUtils.initClient(okHttpClient);
  • Установка конкретного сертификата:
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(сертификатInputStream, null, null);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
         // Другие конфигурации
         .build();
OkHttpUtils.initClient(okHttpClient);
  • Би-диапазонная аутентификация:
HttpsUtils.getSslSocketFactory(
	сертификатInputStream,
	локальныйСертификатInputStream,
	парольЛокальногоСертификата);

Аналогично, в рамках проекта предоставляются несколько реализованных классов, и вы можете самостоятельно реализовать SSLSocketFactory, передав его как sslSocketFactory.

Примеры других методов использования

GET запрос

String url = "http://www.csdn.net/";
OkHttpUtils
    .get()
    .url(url)
    .addParams("username", "hyman")
    .addParams("password", "123")
    .build()
    .execute(new StringCallback() {
            @Override
            public void onError(Request request, Exception e) {

            }

            @Override
            public void onResponse(String response) {

            }
        });

POST запрос

OkHttpUtils
    .post()
    .url(url)
    .addParams("username", "hyman")
    .addParams("password", "123")
    .build()
    .execute(callback);

Отправка JSON с помощью POST

OkHttpUtils
    .postString()
    .url(url)
    .content(jsonContent)
    .mediaType(MediaType.parse("application/json; charset=utf-8"))
    .build()
    .execute(callback);
``````java
OkHttpUtils
    .postString()
    .url(url)
    .content(new Gson().toJson(new User("zhy", "123")))
    .mediaType(MediaType.parse("application/json; charset=utf-8"))
    .build()
    .execute(new MyStringCallback());

При отправке строки Gson на сервер обратите внимание: при передаче JSON не используйте addHeader для установки contentType, а вместо этого воспользуйтесь .mediaType(MediaType.parse("application/json; charset=utf-8")).### Отправка файла

OkHttpUtils
    .postFile()
    .url(url)
    .file(file)
    .build()
    .execute(new MyStringCallback());

Отправляет файл в теле запроса на сервер.

Отправка формы с файлами

OkHttpUtils.post()//
    .addFile("mFile", "messenger_01.png", file)//
    .addFile("mFile", "test1.txt", file2)//
    .url(url)
    .params(params)//
    .headers(headers)//
    .build()//
    .execute(new MyStringCallback());

Поддерживает одновременную отправку одного или нескольких файлов. Первый параметр метода addFile представляет собой ключ файла, то есть значение атрибута name в форме <input type="file" name="mFile"/>.

Создание пользовательского CallBack

Внутренне поддерживаются StringCallback, FileCallback, BitmapCallback. Вы можете создать свой собственный CallBack в зависимости от ваших потребностей, например, чтобы вернуть объект User:

public abstract class UserCallback extends Callback<User> {
    @Override
    public User parseNetworkResponse(Response response) throws IOException {
        String string = response.body().string();
        User user = new Gson().fromJson(string, User.class);
        return user;
    }
}
OkHttpUtils
    .get()//
    .url(url)//
    .addParams("username", "hyman")//
    .addParams("password", "123")//
    .build()//
    .execute(new UserCallback() {
        @Override
        public void onError(Request request, Exception e) {
            mTv.setText("onError:" + e.getMessage());
        }

        @Override
        public void onResponse(User response) {
            mTv.setText("onResponse:" + response.username);
        }
    });

Метод parseNetworkResponse используется для парсинга ответа сети, этот метод выполняется в фоновом потоке, поэтому вы можете выполнять любые затратные операции, подробнее см. примеры.### Загрузка файла

OkHttpUtils//
    .get()//
    .url(url)//
    .build()//
    .execute(new FileCallback(Environment.getExternalStorageDirectory().getAbsolutePath(), "gson-2.2.1.jar")//
    {
        @Override
        public void inProgress(float progress)
        {
            mProgressBar.setProgress((int) (100 * progress));
        }

        @Override
        public void onError(Request request, Exception e)
        {
            Log.e(TAG, "ошибка:" + e.getMessage());
        }

        @Override
        public void onResponse(File file)
        {
            Log.e(TAG, "ответ:" + file.getAbsolutePath());
        }
    });

При загрузке файла можно использовать FileCallback, передав путь к директории и имя файла.

Отображение изображения

OkHttpUtils
    .get()//
    .url(url)//
    .build()//
    .execute(new BitmapCallback()
    {
        @Override
        public void onError(Request request, Exception e)
        {
            mTv.setText("Ошибка: " + e.getMessage());
        }

        @Override
        public void onResponse(Bitmap bitmap)
        {
            mImageView.setImageBitmap(bitmap);
        }
    });

Для отображения изображения достаточно передать BitmapCallback.

Отображение прогресса загрузки/скачивания

new Callback<T>()
{
    //...
    @Override
    public void inProgress(float progress)
    {
       //используйте прогресс: 0 ~ 1
    }
}

В коллбэке есть метод inProgress, который можно переопределить для отслеживания прогресса.

Запросы типа HEAD, DELETE, PUT, PATCH


OkHttpUtils
     .put()//также можно использовать delete(), head(), patch()
     .requestBody(RequestBody.create(null, "может что-то"))//
     .build()//
     .execute(new MyStringCallback());

Если требуется передача данных в теле запроса, как в случае с PUT или PATCH, создайте объект RequestBody и передайте его.### Синхронные запросы

Response response = OkHttpUtils
    .get()//
    .url(url)//
    .tag(this)//
    .build()//
    .execute();

Метод execute() без передачи коллбэка выполняет синхронный запрос и возвращает объект Response.

Отмена одного запроса

RequestCall call = OkHttpUtils.get().url(url).build();
call.cancel();

Отмена запросов по тегу

Для всех поддерживаемых методов последний параметр — это Object tag. Для отмены используется метод OkHttpUtils.cancelTag(tag).

Например, при работе с AbilitySlice, когда AbilitySlice уничтожается, все связанные запросы также могут быть отменены:

OkHttpUtils
    .get()//
    .url(url)//
    .tag(this)//
    .build()//

@Override
protected void onStop()
{
    super.onStop();
    // можно отменить все запросы с одним тегом
    OkHttpUtils.cancelTag(this); // отменяет все запросы с тегом AbilitySlice.this
}

Обфускация

#okhttputils
-dontwarn com.zhy.http.**
-keep class com.zhy.http.** {*;}

#okhttp
-dontwarn okhttp3.**
-keep class okhttp3.** {*;}

#okio
-dontwarn okio.**
-keep class okio.** {*;}

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

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

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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