すべてのプロダクト
Search
ドキュメントセンター

HTTPDNS:C SDK の統合

最終更新日:Jun 18, 2026

HTTPDNS C SDK をプロジェクトに統合し、HTTPDNS サービスを使用してドメイン名を解決します。

ステップ 1:環境の準備

SDK を統合するには、以下のビルドツールとサードパーティライブラリが必要です。先に進む前に、これらの依存関係をビルドマシンにインストールしてください。

名前

説明

バージョン

git

バージョン管理ツール

1.8 以降

cmake

ビルドツール

3.0 以降

gcc

コンパイラツール

4.5 以降

vcpkg (オプション)

依存ライブラリ管理ツール

最新バージョンを推奨します

libcurl

アプリケーション層プロトコルライブラリ

7.33.0 以降

apr/apr-util

C/C++ クロスプラットフォームコンポーネントライブラリ

1.5.2 以降

cjson

JSON 文字列解析

最新バージョンを推奨します

1. ビルドツールのインストール

ビルドプロセスでは Git、CMake、および gcc/g++ を使用します。これらの CLI ツールがローカルマシンにインストールされていることを確認してください。インストールされていない場合は、次のコマンドを実行してインストールします:

  • Ubuntu/Debian

    sudo  apt update
    sudo  apt install -y git cmake gcc g++
  • Alibaba Cloud Linux/CentOS Stream/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
    説明

    Homebrew は macOS の組み込みパッケージマネージャーではありません。パッケージをインストールする前に、Homebrew をインストールしてください。

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

2. 依存ライブラリのインストール

SDK は、ネットワーク操作のために libcurl (7.33.0 以降)、メモリ管理とクロスプラットフォーム互換性のために apr/apr-util (1.5.2 以降)、サーバーレスポンスの解析のために cjson に依存しています。これらのライブラリは SDK にバンドルされていません。これらをインストールし、ヘッダーファイルとライブラリファイルのディレクトリをプロジェクトに追加してください。VCPKG を使用するか、手動でインストールできます。

2.1 VCPKG によるインストール

  • VCPKG のインストール

  • SDK の依存ライブラリのインストール

    • macOS/Linux

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

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

      VCPKG はデフォルトで現在のプラットフォーム用のライブラリをインストールします。クロスコンパイル (Windows x64 環境で x86 ライブラリをコンパイルするなど) を行うには、トリプレットを指定する必要があります。例:

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

2.2 手動インストール

説明

Unix 系プラットフォームでパッケージマネージャーを使用して cJSON 開発者パッケージを自動的にインストールできない場合は、次のコマンドを実行して手動でインストールできます:

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

ステップ 2:SDK のインストール

  • Linux/macOS

    git clone https://github.com/aliyun/alibabacloud-httpdns-c-sdk.git
    cd alibabacloud-httpdns-c-sdk
    mkdir build
    cd build
    # 依存ライブラリを VCPKG を使用してインストールした場合は、SDK のビルド時に CMake パラメーター -DVCPKG_ROOT=${path_to_vcpkg} を追加します。
    cmake -DCMAKE_BUILD_TYPE=Release ../ 
    make hdns_unit_test
    sudo make install
    sudo ldconfig
  • Windows

    • プロジェクトをダウンロードします。

    • Visual Studio で CMake プロジェクトを開きます。

    • 構成マネージャーで、CMake コマンドパラメーターを -DVCPKG_ROOT=${path_to_vcpkg} に設定します

ステップ 3:SDK の統合

詳細については、「C 統合の例」をご参照ください。統合手順は以下のとおりです。

3.1 SDK のインポート

インストールしたライブラリとヘッダーファイルをプロジェクトに追加します。CMake プロジェクトの場合、次のコマンドを CMakeLists.txt ファイルに追加します:

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

3.2 SDK の初期化

SDK ランタイム環境を初期化します。

 if (hdns_sdk_init() != HDNS_OK) {
        hdns_sdk_cleanup();
  }
   
  // SDK API を使用します。
  
  

3.3 クライアントの作成

 hdns_client_t *client = hdns_client_create(HTTPDNS_ACCOUNT, HTTPDNS_SECRET);
 if (client == NULL) {
    hdns_sdk_cleanup();
  }
 // HTTPDNS クライアントを使用します。
説明
  • HTTPDNS_ACCOUNT は、HTTPDNS によって割り当てられたアカウント ID です。アカウント ID の取得方法の詳細については、「プロダクトの使用フロー」をご参照ください。

  • HTTPDNS_SECRET は、リクエストに署名するために使用されるキーです。認証が不要な場合は、このパラメーターを NULL に設定します。ドメイン名の解決に認証が必要な場合は、このパラメーターを指定します。詳細については、「開発者向け設定」をご参照ください。

3.4 クライアントの設定

クライアントインスタンスを作成した後、HTTPDNS クライアントの設定をカスタマイズします:

// サーバーサイドのリクエストタイムアウト時間をミリ秒単位で設定します。
hdns_client_set_timeout(client, 2000);
// ローカルキャッシュを有効にするかどうかを指定します。
hdns_client_set_using_cache(client, true);
// HTTPS を使用して HTTPDNS サーバーにアクセスするかどうかを指定します。
hdns_client_set_using_https(client, true);
// リクエストに署名を追加するかどうかを指定します。
hdns_client_set_using_sign(client,  true);
// サーバーサイドのリクエストのリトライ回数を設定します。
hdns_client_set_retry_times(client, 1);
// HTTPDNS 解決サービスクラスターを設定します。
hdns_client_set_region(client, "global");
// HTTPDNS スケジューリングクラスターを設定します。
hdns_client_set_schedule_center_region(client, "cn");
// ネットワーク変更後にローカルキャッシュを更新するかどうかを指定します。
hdns_client_enable_update_cache_after_net_change(client, true);
// 期限切れのキャッシュの取得を許可するかどうかを指定します。
hdns_client_enable_expired_ip(client, true);
// ローカル DNS に自動的にフォールバックするかどうかを指定します。
hdns_client_enable_failover_localdns(client, true);
// 事前解決のためのドメイン名を追加します。
hdns_client_add_pre_resolve_host(client, "www.aliyun.com");
// IP 可用性プローブのために項目を追加します。
hdns_client_add_ip_probe_item(client, "www.aliyun.com", 443);
// Time-to-Live (TTL) をカスタマイズします。
hdns_client_add_custom_ttl_item(client, "www.aliyun.com", 120);
重要

hdns_client_set_using_https を true に設定すると、コストが増加します。詳細については、「プロダクトの課金」をご参照ください。

3.5 クライアントの開始

   hdns_client_start(client);

3.6 ドメイン名の解決

クライアントが開始したら、SDK API を呼び出してドメイン名を解決します。次の例では、単一のドメイン名の同期解決を実行します:

    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 IP アドレスの選択

解決結果を取得した後、解決された 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 サービスへのアクセス

static void mock_access_business_web_server(const char *dst_ip) {
    CURL *curl;
    CURLcode res;
    curl = curl_easy_init();
    if (curl) {
        // サービス URL を連結します。
        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);

        // HTTPS のために事前に解決されたホストと IP アドレスを設定します。
        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);
        // レスポンス結果のコールバックを設定します。
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data_callback);
#if defined(_WIN32)
        curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA);
#endif
        // HTTP リクエストを開始します。
        res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed, url=%s, ip=%s, error=%s\n",
                    url,
                    dst_ip,
                    curl_easy_strerror(res));
        }
        // サービスアクセスに関連するリソースを解放します。
        curl_slist_free_all(dns);
        /* 常にクリーンアップ */
        curl_easy_cleanup(curl);
    }
}

3.9 クライアントのクリーンアップ

クライアントが不要になったら、解放します。

hdns_client_cleanup(client);

3.10 SDK のクリーンアップ

SDK が不要になったら、解放します。

hdns_sdk_cleanup();