全部產品
Search
文件中心

HTTPDNS:C/C++語言業務情境實現IP直連

更新時間:Jul 13, 2024

移動研發平台 EMAS的HTTPDNS服務,目前僅支援Android/iOS端的SDK接入。其他類型終端,可通過C/C++語言curl庫實現IP直連的方式,使用HTTPDNS服務。

背景知識

使用IP直連訪問HTTPDNS時,主要處理以下關鍵點:

  • HTTP Host頭設定。

  • HTTPS SNI設定。

  • HTTPS 認證校正處理。

前提條件

使用curl庫。

操作步驟

1、通過HTTP API方式解析IP,具體操作請參見:單網域名稱解析介面

2、使用C/C++ curl庫的Custom addresses for hosts功能,進行IP直連請求,具體內容請參見:libcurl庫文檔

應用樣本

假設業務環境如下:

  • 訪問業務網站:https://example.com/

  • 網域名稱:example.com

  • IP地址:192.168.XX.XX

IP直連請求如下:

  • 基於curl命令列

$ curl --max-time 5 --resolve example.com:4XX:192.168.XX.XX https://example.com/
  • 基於libcurl庫

#include <stdio.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl;
    CURLcode res;

    curl_global_init(CURL_GLOBAL_DEFAULT);

    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5);

        /* 設定網域名稱和通過HTTPDNS預先解析出來的IP */
        struct curl_slist *dns;
        dns = curl_slist_append(NULL, "example.com:4XX:192.168.XX.XX");
        curl_easy_setopt(curl, CURLOPT_RESOLVE, dns);

        /* Perform the request, res will get the return code */
        res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                    curl_easy_strerror(res));
        }

        /* always cleanup */
        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();

    return 0;
}