All Products
Search
Document Center

HTTPDNS:Integrasi HTTPDNS SDK untuk C

Last Updated:Nov 26, 2025

Topik ini menjelaskan cara mengintegrasikan HTTPDNS SDK untuk C.

Langkah 1: Persiapkan lingkungan

Integrasi SDK memerlukan alat pembuatan dan pustaka pihak ketiga. Sebelum memulai, pastikan dependensi terinstal di mesin Anda.

Name

Deskripsi

Versi

git

Alat pengelolaan versi

1.8 dan yang lebih baru.

cmake

Alat pembuatan

3.0 dan yang lebih baru.

gcc

Alat kompilasi

4.5 dan yang lebih baru.

vcpkg (Opsional)

Alat manajemen pustaka dependensi

Kami merekomendasikan Anda menggunakan versi terbaru.

libcurl

Pustaka protokol lapisan aplikasi

7.33.0 dan yang lebih baru.

apr/apr-util

Pustaka komponen lintas platform untuk C dan C++

1.5.2 dan yang lebih baru.

cjson

Pustaka parser string JSON

Kami merekomendasikan Anda menggunakan versi terbaru.

1. Instal alat pembuatan

Proses pembuatan melibatkan pengkloningan kode dari GitHub, menggunakan CMake untuk membangun proyek, serta GCC atau G++ untuk kompilasi. Pastikan CLI berikut telah terinstal di komputer Anda. Jika belum, jalankan perintah yang disediakan:

  • Ubuntu atau Debian

    sudo  apt update
    sudo  apt install -y git cmake gcc g++
  • Alibaba Cloud, CentOS Stream, atau Fedora

    sudo yum check-update
    sudo yum install -y git cmake  gcc  gcc-c++
  • OpenSUSE

    sudo zypper refresh
    sudo zypper install -y git cmake  gcc  gcc-c++
  • macOS

    export HOMEBREW_NO_AUTO_UPDATE=1
    brew install git gcc cmake
    Catatan

    brew adalah manajer paket eksternal. Untuk menggunakannya, instal brew terlebih dahulu.

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • Windows

2. Instal pustaka dependensi

SDK membutuhkan libcurl versi 7.33.0 atau lebih baru untuk operasi jaringan, apr atau apr-util versi 1.5.2 atau lebih baru untuk manajemen memori lintas platform, serta cJSON untuk mengurai respons server. SDK tidak menyertakan pustaka eksternal ini. Pastikan pustaka tersebut terinstal dan tambahkan direktori file header serta pustaka ke proyek Anda. Contoh ini mendukung instalasi berbasis VCPKG atau instalasi manual pustaka C/C++.

2.1 Instalasi menggunakan VCPKG

  • Instal VCPKG.

  • Instal pustaka dependensi SDK.

    • macOS atau Linux

       ./vcpkg install apr apr-util curl[openssl,http2] cjson
    • Windows

      .\vcpkg.exe install apr apr-util curl[openssl,http2] cjson
      Catatan

      Secara default, VCPKG menginstal library yang sesuai dengan platform saat ini. Untuk melakukan kompilasi lintas platform—misalnya mengompilasi library x86 di lingkungan Windows x64—Anda harus menentukan triplet. Berikut contoh perintahnya:

      ./vcpkg.exe install apr:x86-windows apr-util:x86-windows curl[openssl,http2]:x86-windows cjson:x86-windows

2.2 Instalasi manual

  • Ubuntu atau Debian

    sudo  apt update
    sudo apt install -y libcurl4-openssl-dev libapr1-dev libaprutil1-dev libcjson-dev
  • Alibaba Cloud, CentOS Stream, atau Fedora

    sudo yum check-update
    sudo yum install -y libcurl-devel apr-devel apr-util-devel cjson-devel
  • OpenSUSE

    sudo zypper refresh
    sudo zypper install -y libcurl-devel libapr1-devel libapr-util1-devel cJSON-devel
  • macOS

    brew install curl apr apr-util cjson
  • Windows

Catatan

Jika paket cJSON tidak dapat diinstal secara otomatis menggunakan package manager pada platform UNIX-like, jalankan perintah berikut untuk menginstalnya:

git clone https://github.com/DaveGamble/cJSON.git && cd cJSON && mkdir build && cd build && cmake  ../ && sudo make install && cd ../../ && rm -rf cJSON

Langkah 2: Instal SDK

  • Linux atau macOS

    git clone https://github.com/aliyun/alibabacloud-httpdns-c-sdk.git
    cd alibabacloud-httpdns-c-sdk
    mkdir build
    cd build
    # Jika library dependensi diinstal menggunakan VCPKG, tambahkan parameter Cmake: -DVCPKG_ROOT=${Installation directory of VCPKG}
    cmake -DCMAKE_BUILD_TYPE=Release ../ 
    make hdns_unite_test
    sudo make install
    sudo ldconfig
  • Windows

    • Unduh proyek CMake.

    • Buka proyek CMake di Visual Studio.

    • Tambahkan parameter CMake dalam konfigurasi manajemen: -DVCPKG_ROOT=${Direktori instalasi VCPKG}

Langkah 3: Integrasi SDK

Untuk detail lebih lanjut tentang integrasi SDK, lihat Contoh integrasi. Bagian berikut menjelaskan langkah-langkah integrasi SDK.

3.1. Impor SDK

Untuk mengintegrasikan SDK, impor pustaka dan file header yang diinstal secara lokal. Tambahkan perintah berikut ke file CMakeLists.txt proyek CMake:

find_library(HTTPDNS_LIBRARY httpdns_c_sdk_static)
include_directories(${CMAKE_INSTALL_PREFIX}/include/httpdns)

3.2 Inisialisasi SDK

Inisialisasi lingkungan runtime SDK.

 if (hdns_sdk_init() != HDNS_OK) {
        hdns_sdk_cleanup();
  }
   
  // Gunakan API dari SDK.
  
  

3.3 Buat klien

 hdns_client_t *client = hdns_client_create(HTTPDNS_ACCOUNT, HTTPDNS_SECRET);
 if (client == NULL) {
    hdns_sdk_cleanup();
  }
 // Gunakan Klien HTTPDNS.
Catatan
  • HTTPDNS_ACCOUNT menentukan ID akun yang ditetapkan oleh HTTPDNS. Untuk informasi lebih lanjut tentang cara memperoleh ID, lihat Gunakan layanan.

  • HTTPDNS_SECRET menentukan kunci untuk menandatangani permintaan. Jika autentikasi tidak diperlukan, atur parameter ini ke NULL. Jika autentikasi diperlukan, tentukan parameter ini. Untuk detailnya, lihat Pengembangan dan konfigurasi.

3.4 Konfigurasikan klien

Setelah klien dibuat, konfigurasikan pengaturan berikut untuk menyesuaikan klien HTTPDNS:

// Periode batas waktu permintaan. Unit: milidetik.
hdns_client_set_timeout(client, 2000);
// Tentukan apakah akan mengaktifkan caching lokal.
hdns_client_set_using_cache(client, true);
// Tentukan apakah akan menggunakan HTTPS untuk mengakses server HTTPDNS.
hdns_client_set_using_https(client, true);
// Tentukan apakah akan menandatangani permintaan.
hdns_client_set_using_sign(client,  true);
// Jumlah percobaan ulang permintaan.
hdns_client_set_retry_times(client, 1);
// Kluster layanan HTTPDNS.
hdns_client_set_region(client, "global");
// Kluster penjadwalan HTTPDNS.
hdns_client_set_schedule_center_region(client, "cn");
// Tentukan apakah akan memperbarui cache lokal setelah perubahan jaringan.
hdns_client_enable_update_cache_after_net_change(client, true);
// Tentukan apakah akan mengizinkan HTTPDNS memperoleh data kedaluwarsa dari cache.
hdns_client_enable_expired_ip(client, true);
// Tentukan apakah akan secara otomatis menggunakan server Domain Name System (DNS) lokal.
hdns_client_enable_failover_localdns(client, true);
// Nama domain yang ingin Anda pra-resolve.
hdns_client_add_pre_resolve_host(client, "www.aliyun.com");
// Tambahkan sniffing IP.
hdns_client_add_ip_probe_item(client, "www.aliyun.com", 443);
// Waktu hidup (TTL) kustom.
hdns_client_add_custom_ttl_item(client, "www.aliyun.com", 120);
Penting

Jika Anda mengatur parameter hdns_client_set_using_https ke `true`, biaya Anda akan meningkat. Untuk informasi selengkapnya, lihat dokumen Penagihan Produk.

3.5 Mulai klien

   hdns_client_start(client);

3.6 Resolusi nama domain

Setelah klien dimulai, panggil API yang disediakan oleh SDK untuk menyelesaikan nama domain. SDK menyediakan beberapa operasi untuk skenario berbeda. Berikut adalah contoh resolusi nama domain tunggal menggunakan operasi sinkron.

    hdns_list_head_t *results = NULL;
    hdns_status_t status = hdns_get_result_for_host_sync_with_cache(client,
                                                                    MOCK_BUSINESS_HOST,
                                                                    HDNS_QUERY_AUTO,
                                                                    NULL, &results);

3.7 Pilih alamat IP

Setelah mendapatkan hasil resolusi nama domain, Anda dapat mengakses beban kerja pelanggan menggunakan alamat IP tempat nama domain tersebut di-resolve.

 if (hdns_status_is_ok(&status)) {
        char ip[HDNS_IP_ADDRESS_STRING_LENGTH];
        if (hdns_select_ip_randomly(results, HDNS_QUERY_AUTO, ip) == HDNS_OK) {
            mock_access_business_web_server(ip);
        }
  }
  if (hdns_status_is_ok(&status)) {
        char ip[HDNS_IP_ADDRESS_STRING_LENGTH];
        if (hdns_select_ip_randomly(results, HDNS_QUERY_AUTO, ip) == HDNS_OK) {
            mock_access_business_web_server(ip);
        }
  }
  hdns_list_free(results);

3.8 Akses beban kerja

static void mock_access_business_web_server(const char *dst_ip) {
    CURL *curl;
    CURLcode res;
    curl = curl_easy_init();
    if (curl) {
        // Gabungkan URL permintaan.
        char url[256];
        strcpy(url, "https://");
        strcat(url, MOCK_BUSINESS_HOST);
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30);

        // Tentukan host dan alamat IP yang telah diselesaikan sebelumnya untuk Permintaan HTTPS.
        struct curl_slist *dns;
        char sni[256];
        strcpy(sni, MOCK_BUSINESS_HOST);
        strcat(sni, ":443:");
        strcat(sni, dst_ip);
        dns = curl_slist_append(NULL, sni);
        curl_easy_setopt(curl, CURLOPT_RESOLVE, dns);
        // Panggil balik.
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data_callback);
#if defined(_WIN32)
        curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA);
#endif
        // Ajukan permintaan HTTP.
        res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() gagal, url=%s, ip=%s, error=%s\n",
                    url,
                    dst_ip,
                    curl_easy_strerror(res));
        }
        // Lepaskan sumber daya terkait akses beban kerja.
        curl_slist_free_all(dns);
        /* selalu bersihkan */
        curl_easy_cleanup(curl);
    }
}

3.9 Pembersihan client

Jika klien tidak lagi diperlukan, lepaskan klien tersebut.

hdns_client_cleanup(client);

3.10 Lepaskan sumber daya SDK

Jika sumber daya SDK tidak lagi diperlukan, lepaskan sumber daya tersebut.

hdns_sdk_cleanup();