All Products
Search
Document Center

HTTPDNS:Praktik terbaik penggunaan HTTPDNS dengan OkHttp di Java

Last Updated:Jan 10, 2026

Dokumen ini menjelaskan cara mengintegrasikan HTTPDNS ke dalam aplikasi Java Anda menggunakan OkHttp.

1. Latar Belakang

Jika Anda menggunakan framework jaringan OkHttp dalam aplikasi Java Anda, Anda dapat dengan mudah mengintegrasikan layanan HTTPDNS dengan mengimplementasikan antarmuka DNS kustom yang disediakan oleh OkHttp.

OkHttp adalah proyek open source untuk menangani permintaan jaringan. Framework ini merupakan solusi ringan yang populer untuk aplikasi Java dan Android, yang dikembangkan oleh perusahaan pembayaran seluler Square. Seiring dengan semakin matangnya framework ini, banyak pengembang telah mengadopsinya untuk aplikasi mereka.

Secara default, OkHttp menggunakan layanan DNS sistem melalui kelas InetAddress untuk resolusi nama domain. Namun, OkHttp juga menyediakan antarmuka yang memungkinkan Anda menentukan layanan DNS kustom, yang dapat digunakan untuk mengintegrasikan HTTPDNS.

2. Implementasikan antarmuka DNS kustom

OkHttp menyediakan antarmuka Dns. Implementasikan antarmuka ini untuk membuat layanan DNS kustom:

import com.alibaba.sdk.java.httpdns.HTTPDNSResult;
import com.alibaba.sdk.java.httpdns.HttpDnsClient;
import com.alibaba.sdk.java.httpdns.RequestIpType;
import okhttp3.Dns;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;

public class OkHttpDns implements Dns {
    
    private final HttpDnsClient httpDnsClient;
    
    public OkHttpDns(HttpDnsClient httpDnsClient) {
        this.httpDnsClient = httpDnsClient;
    }
    
    @Override
    public List<InetAddress> lookup(String hostname) throws UnknownHostException {
        HTTPDNSResult result = httpDnsClient.getHttpDnsResultForHostSyncNonBlocking(
            hostname, 
            RequestIpType.both
        );
        
        List<InetAddress> inetAddresses = new ArrayList<>();
        
        try {
            if (result != null && result.getIps() != null) {
                for (String ip : result.getIps()) {
                    inetAddresses.add(InetAddress.getByName(ip));
                }
            }
            if (result != null && result.getIpv6s() != null) {
                for (String ip : result.getIpv6s()) {
                    inetAddresses.add(InetAddress.getByName(ip));
                }
            }
        } catch (UnknownHostException e) {
            // Abaikan kegagalan saat menguraikan satu alamat IP.
        }
        
        if (!inetAddresses.isEmpty()) {
            return inetAddresses;
        }
        
        // Kembali ke DNS sistem.
        return Dns.SYSTEM.lookup(hostname);
    }
}

OkHttp memiliki mekanisme retry bawaan. Selama proses retry, OkHttp mungkin menggunakan alamat IP yang berbeda untuk membuat koneksi. Dengan mengembalikan daftar beberapa alamat IP dari metode lookup(), Anda dapat mencegah kegagalan permintaan jika salah satu alamat IP tidak tersedia.

3. Konfigurasikan OkHttpClient

Buat objek OkHttpClient dan teruskan layanan DNS kustom Anda ke objek tersebut:

HttpDnsClient httpDnsClient = HttpDnsClient.getClient(accountId);

OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .dns(new OkHttpDns(httpDnsClient))
    .build();

4. Ringkasan

Keunggulan utama penggunaan HTTPDNS dengan OkHttp adalah:

  • Implementasi sederhana: Anda dapat mengintegrasikan layanan ini hanya dengan mengimplementasikan antarmuka Dns.

  • Fleksibilitas tinggi: Berfungsi dalam berbagai skenario seperti HTTPS, Server Name Indication (SNI), dan manajemen cookie. Tidak diperlukan langkah tambahan untuk validasi Sertifikat atau verifikasi Nama domain.

  • Retry Otomatis: Jika Anda mengembalikan beberapa alamat IP, OkHttp secara otomatis mencoba koneksi ulang menggunakan alamat IP yang berbeda.