HTTPDNS 目前支持 Android、iOS、Harmony、C 端的 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 地址:93.184.XXX.XX
IP 直连请求如下:
-
基于 curl 命令行
$ curl --max-time 5 --resolve example.com:443:93.184.XXX.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:443:93.184.XXX.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;