All Products
Search
Document Center

HTTPDNS:Referensi API DoH

Last Updated:Nov 10, 2025

Topik ini menjelaskan titik akhir DNS over HTTPS (DoH), format permintaan dan tanggapan, serta semantik kesalahan dari Alibaba Cloud HTTPDNS.

1. Prasyarat

Setelah Anda mengonfigurasi layanan DoH, Anda dapat langsung memanggil API DoH untuk mendapatkan alamat IP hasil resolusi.

2. Detail API DoH

API ini mematuhi standar RFC 8484 dan mendukung metode GET maupun POST. Permintaan GET mengirimkan pesan DNS melalui parameter dns (Base64URL), sedangkan permintaan POST mengirimkan pesan DNS dalam badan permintaan biner.

2.1 Metode GET

Metode ini digunakan untuk mengirim pesan DNS yang dikodekan Base64URL sebagai parameter kueri URL. Berikut adalah format permintaan dan tanggapannya:

Permintaan

  • Metode: GET

  • Jalur: /dns-query?dns=<base64url(dns_wire_message)>

  • Header permintaan:

    • Accept: application/dns-message

  • Parameter kueri:

    • dns (Wajib): String pesan DNS biner yang dikodekan Base64URL tanpa padding =.

Tanggapan

  • 200: Berhasil. Badan tanggapan berupa application/dns-message (konfirmasi DNS biner).

  • 400: Permintaan Salah. Kesalahan ini terjadi jika suatu parameter tidak valid, misalnya DoH belum diaktifkan atau parameter dns tidak ada atau tidak valid.

  • 5xx: Kesalahan Server Internal.

Catatan

Jika nama domain tidak ada dalam daftar resolusi nama domain, DoH akan mengembalikan kode status 200 tetapi tidak mengembalikan hasil resolusi.

2.2 Metode POST

Metode ini digunakan untuk mengirim pesan DNS biner secara langsung dalam badan permintaan. Berikut adalah format permintaan dan tanggapannya:

Permintaan

  • Metode: POST

  • Jalur: /dns-query

  • Header permintaan:

    • Content-Type: application/dns-message

    • Accept: application/dns-message

  • Badan permintaan:

    • Pesan DNS biner (format wire).

Tanggapan

  • 200: Berhasil. Badan tanggapan berupa application/dns-message (konfirmasi DNS biner).

  • 400: Permintaan Salah. Kesalahan ini terjadi jika suatu parameter tidak valid, misalnya DoH belum diaktifkan atau pesannya tidak valid.

  • 5xx: Kesalahan Server Internal.

Catatan

Jika nama domain tidak ada dalam daftar resolusi nama domain, DoH akan mengembalikan kode status 200 tetapi tidak mengembalikan hasil resolusi.

2.3 Contoh permintaan

Contoh Python berikut menunjukkan cara mengirim permintaan DoH untuk mengambil hasil resolusi untuk www.aliyun.com. Contoh ini memerlukan pustaka jaringan dnspython dan requests.

Contoh permintaan GET

  • Kode contoh

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import requests
    import base64
    import dns.message
    
    def query_doh(domain, rrType):
        # Buat permintaan DNS
        request = dns.message.make_query(domain, rrType)
        request_data = request.to_wire()
    
        # Kodekan permintaan dalam format Base64URL
        base64_query = base64.urlsafe_b64encode(request_data).decode().rstrip("=")
    
        # Gunakan titik akhir DoH HTTPDNS
        url = f"https://1xxxx3.aliyunhttpdns.com/dns-query?dns={base64_query}"
    
        # Kirim permintaan GET
        headers = {
            "Accept": "application/dns-message"
        }
        response = requests.get(url, headers=headers)
    
        # Periksa kesalahan
        if response.status_code != 200:
            print(f"Error: {response.status_code}")
            return
    
        # Uraikan tanggapan
        response_data = response.content
        dns_response = dns.message.from_wire(response_data)
    
        # Ambil dan cetak alamat IP
        for answer in dns_response.answer:
            ttl = answer.ttl
            for item in answer.items:
                print(f"Answer: {item} TTL: {ttl}")
    
    if __name__ == "__main__":
        # Nama domain yang akan dikueri
        domain = "www.aliyun.com"
        rrType = "A"
        query_doh(domain, rrType)
        
  • Hasil yang diharapkan

    Answer: www-jp-de-intl-adns.aliyun.com. TTL: 3600
    Answer: www-jp-de-intl-adns.aliyun.com.gds.alibabadns.com. TTL: 3600
    Answer: www.aliyun.com.w.cdngslb.com. TTL: 3600
    Answer: 61.164.xxx.xxx TTL: 3600
    Answer: 183.146.xxx.xxx TTL: 3600
    Answer: 60.188.xxx.xxx TTL: 3600
    Answer: 122.228.xxx.xxx TTL: 3600

Contoh permintaan POST

  • Kode contoh

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import requests
    import dns.message
    
    def query_doh_post(domain, rrType):
        # Buat permintaan DNS
        request = dns.message.make_query(domain, rrType)
        request_data = request.to_wire()
    
        # Gunakan titik akhir DoH HTTPDNS
        url = "https://1xxxx3.aliyunhttpdns.com/dns-query"
    
        # Kirim permintaan POST
        headers = {
            "Accept": "application/dns-message",
            "Content-Type": "application/dns-message"
        }
        
        # Kirim langsung data format wire DNS sebagai badan POST
        response = requests.post(url, headers=headers, data=request_data)
    
        # Periksa kesalahan
        if response.status_code != 200:
            print(f"Error: {response.status_code}")
            return
    
        # Uraikan tanggapan
        response_data = response.content
        dns_response = dns.message.from_wire(response_data)
    
        # Ambil dan cetak alamat IP
        for answer in dns_response.answer:
            ttl = answer.ttl
            for item in answer.items:
                print(f"Answer: {item} TTL: {ttl}")
    
    if __name__ == "__main__":
        # Nama domain yang akan dikueri
        domain = "www.aliyun.com"
        rrType = "AAAA"
        query_doh_post(domain, rrType)
        
  • Hasil yang diharapkan

    Answer: www-jp-de-intl-adns.aliyun.com. TTL: 120
    Answer: www-jp-de-intl-adns.aliyun.com.gds.alibabadns.com. TTL: 300
    Answer: www.aliyun.com.w.cdngslb.com. TTL: 120
    Answer: 240e:f7:7c00:xxxx:xxxx::xxxx TTL: 60
    Answer: 240e:f7:7c00:xxxx:xxxx::xxxx TTL: 60

    3. Ringkasan

    Topik ini menjelaskan API DoH yang disediakan oleh HTTPDNS. Anda dapat merujuk pada detail API dan contoh kode untuk mengakses titik akhir DoH guna melakukan resolusi nama domain.