Samouczek przykładowy OkHttp Android

Photo of author

By maciekx

Wstęp

OkHttp to zaawansowana biblioteka sieciowa dedykowana platformie Android, oferująca szereg udoskonaleń i funkcji w porównaniu do standardowego połączenia HttpUrlConnection. Biblioteka ta umożliwia realizację zapytań HTTP i HTTPS, efektywne odbieranie odpowiedzi oraz kompleksowe zarządzanie plikami cookie, przekierowaniami i mechanizmami buforowania.

Dodatkowo, OkHttp zapewnia rozbudowaną obsługę błędów i zaawansowane opcje kontroli nad procesem żądania, w tym możliwość ponawiania prób oraz przechwytywania danych przesyłanych w ramach komunikacji. Jest to również platforma niezwykle elastyczna, pozwalająca programistom na dostosowanie jej zachowania do specyficznych potrzeb projektu.

Dzięki swojej efektywności i wszechstronnemu zastosowaniu, OkHttp zyskało popularność jako preferowane narzędzie do obsługi komunikacji sieciowej w aplikacjach mobilnych działających na systemie Android.

Inicjalizacja klienta OkHttp

Etap 1: Dodanie zależności projektu

W pliku konfiguracyjnym build.gradle Twojego modułu aplikacji, umieść następującą linię:

gradle
implementation "com.squareup.okhttp3:okhttp:4.10.0"

Etap 2: Stworzenie obiektu klienta

Aby utworzyć instancję klienta OkHttp, wykorzystaj klasę OkHttpClient.Builder:

kotlin
val klient = OkHttpClient.Builder()
.build()

Etap 3: Wysyłanie żądania HTTP

Aby zainicjować żądanie HTTP, użyj funkcji newCall():

kotlin
val zadanie = Request.Builder()
.url("https://example.com")
.build()

val połączenie = klient.newCall(zadanie)

Etap 4: Odbiór danych odpowiedzi

Po wysłaniu żądania, odpowiedź możesz przechwycić za pomocą funkcji execute():

kotlin
val odpowiedz = połączenie.execute()

Konfiguracja klienta OkHttp

Mechanizm interceptorów

Intercepory to obiekty, które dają możliwość modyfikacji wysyłanych żądań oraz odbieranych odpowiedzi przed ich dotarciem do celu lub programisty. Wykorzystuje się je w zadaniach takich jak uwierzytelnianie, rejestrowanie operacji, czy też kompresja danych.

Zarządzanie czasem trwania połączeń

OkHttp pozwala na precyzyjną konfigurację czasu trwania żądań i połączeń. Można tego dokonać za pomocą funkcji connectTimeout(), readTimeout() i writeTimeout():

kotlin
val klient = OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build()

Obsługa ponawiania połączeń

Domyślnie, OkHttp nie podejmuje automatycznej próby ponownego wysłania nieudanych żądań. Jednakże, tę funkcjonalność można włączyć za pomocą funkcji retryOnConnectionFailure():

kotlin
val klient = OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.build()

Zaawansowane funkcje biblioteki

Zarządzanie plikami cookie

OkHttp automatycznie obsługuje pliki cookie. Dostęp do zapisanych plików cookie możesz uzyskać za pomocą metody cookieJar():

kotlin
val plikiCookie = klient.cookieJar()

Transparentne przekierowania URL

Biblioteka OkHttp samoczynnie przekierowuje zapytania do podanych adresów URL. Funkcjonalność tę można wyłączyć za pomocą metody followRedirects():

kotlin
val klient = OkHttpClient.Builder()
.followRedirects(false)
.build()

Mechanizm buforowania odpowiedzi

OkHttp wspiera buforowanie odpowiedzi, co wpływa na zwiększenie wydajności. W celu włączenia buforowania, należy użyć metody cache():

kotlin
val bufor = Cache(File("bufor"), 10 * 1024 * 1024) // 10 MB

val klient = OkHttpClient.Builder()
.cache(bufor)
.build()

Podsumowanie

OkHttp jest wszechstronną i wydajną biblioteką sieciową przeznaczoną dla systemu Android. Umożliwia ona sprawne i efektywne realizowanie żądań HTTP i HTTPS, dając jednocześnie możliwość adaptacji jej działania do specyficznych wymagań projektowych.

Dzięki swojej modułowej budowie oraz szerokim opcjom konfiguracyjnym, OkHttp stanowi doskonałe rozwiązanie dla wielu różnorodnych zastosowań w aplikacjach na Androida.

Sekcja często zadawanych pytań

1. Dlaczego warto wybrać OkHttp zamiast HttpUrlConnection?

OkHttp charakteryzuje się szeregiem ulepszeń w porównaniu do HttpUrlConnection, takich jak:

  • Uproszczona obsługa żądań i odpowiedzi
  • Automatyczne zarządzanie przekierowaniami i plikami cookie
  • Zaawansowane mechanizmy kontroli czasu trwania i ponawiania połączeń
  • Szerokie możliwości rozszerzania i dostosowywania

2. Jak zarządzać certyfikatami SSL w OkHttp?

Aby obsłużyć certyfikaty SSL, wykorzystaj obiekt CertificatePinner. Oferuje on funkcje withCertificatePinner() oraz certificatePinner(), pozwalające na weryfikację certyfikatów SSL.

3. Jak odbierać dane asynchronicznie przy użyciu OkHttp?

Możesz zastosować mechanizm wywołań zwrotnych (callback) lub wykorzystać obserwatory RxJava do asynchronicznego pobierania danych. Wywołania zwrotne przekazuje się do funkcji enqueue(), podczas gdy obserwatory używa się wraz z metodą subscribe().

4. W jaki sposób można dostosować zachowanie żądania?

Zachowanie żądania możesz modyfikować przy pomocy intercetorów. Są to obiekty, które można dodawać do klienta OkHttp, by zmieniać zapytania i odpowiedzi przed ich wysłaniem lub odbiorem.

5. Jak zapisywać w pamięci podręcznej dane odpowiedzi w trybie offline?

OkHttp oferuje buforowanie odpowiedzi w celu podniesienia efektywności. Aby aktywować buforowanie, należy skorzystać z metody cache() w konstruktorze OkHttpClient.Builder.

6. Jak wyłączyć automatyczne przekierowania w OkHttp?

Aby zablokować automatyczne przekierowania, zastosuj metodę followRedirects(false) w konstruktorze OkHttpClient.Builder.

7. Jak ustawić limit czasu żądania w OkHttp?

Aby skonfigurować limit czasu żądania, użyj metod connectTimeout(), readTimeout() oraz writeTimeout() w konstruktorze OkHttpClient.Builder.

8. Jak debugować zapytania sieciowe w OkHttp?

OkHttp oferuje funkcję przechwytywania żądań sieciowych za pomocą klasy HttpLoggingInterceptor. Możesz ustawić poziom logowania na BODY lub HEADERS, aby analizować treść zapytań i odpowiedzi.

9. Jak zintegrować OkHttp z RxJava?

OkHttp obsługuje integrację z biblioteką RxJava, która umożliwia odbieranie odpowiedzi asynchronicznie za pomocą obserwatorów. Można użyć adapterów RxJava, takich jak okhttp3.adapter.rxjava2.RxJava2CallAdapterFactory, by skonfigurować integrację.

10. Jak zintegrować OkHttp z Retrofit?

Retrofit to biblioteka służąca do realizacji zapytań sieciowych przy wykorzystaniu interfejsów. Obsługuje ona integrację z OkHttp, co pozwala na wykorzystanie funkcji OkHttp w powiązaniu z interfejsami generowanymi przez Retrofit.


newsblog.pl