添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
魁梧的羊肉串  ·  【Azure ...·  1 周前    · 
强悍的梨子  ·  python ...·  1 周前    · 
性感的鸵鸟  ·  curl命令 CURL命令 测试 ...·  1 周前    · 
独立的灭火器  ·  "54020003 Address ...·  8 月前    · 
听话的帽子  ·  vscode git diff_慕课手记·  9 月前    · 
C/C++语言业务场景实现IP直连

C/C++语言业务场景实现IP直连

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;