1. HTTPDNS
httpdns功能简介
- 1: httpdns 是一款递归DNS服务,与权威DNS不同,HTTPDNS 并不具备决定解析结果的能力,而是主要负责解析过程的实现。
- 2:使用 HTTP 协议访问阿里云或者华为云的服务端,获得域名解析结果,绕过运营商的 Local DNS ,避免域名劫持。
- 3:httpdns 能够直接得到客户端的出口网关 IP,从而更准确地判断客户端地区和运营商,得到更精准的解析结果。
- 4: httpdns 支持全网域名的解析,包括在阿里云(万网)注册的域名,和其它第三方的域名。
GSLB:Global Service Load Balance
功能:
实现对公司设备入口流量的多维度调度策略,满足多云流量调度、灰度测试流量调度等多种需求
使用httpdns解析域名
- 使用httpdns解析域名,请求示例:"https://gslb-dev.rokid.com/api/v1/?sn=dev_sn&devicetype=dev_tyep"
API响应格式
"code":0,
"msg":"Successfully!",
"tag":"Huawei",
"data":[
{
"host":"apigwws.open.rokid.com",
"client_ip":"183.129.185.66",
"ips":["119.3.1.49"]
},
{
"host":"apigwrest.open.rokid.com",
"client_ip":"183.129.185.66",
"ips":["119.3.1.49"]
}
]
}
```
错误码 |
错误信息 |
错误说明 |
400 |
Invalid Request Method, POST and GET Supported Only |
!!请求方法错误,目前仅支持GET和POST |
401 |
Invalid Request Body, Json Supported Only !! |
请求体JSON解析出错 |
402 |
SN and DeviceType Must Provided !! |
请求体JSON解析出错 |
C库提供的HTTPDNS 接口说明
typedef struct
{
char *h_name;
char **h_ips;
int32_t ips_num;
}host_ips;
typedef struct
{
host_ips **host;
int32_t host_num;
}ips_list;
- typedef int (httpdns_finished_notify)(int status, void userdata);
2个返回值 |
类型 |
参数含义 |
数值说明 |
备注 |
返回值 |
int |
-1 失败, 0 成功 |
|
参数 1 |
status |
char* |
请求httpdns 服务结果 |
|
|
参数 2 |
userdata |
void* |
用户回调函数要处理的数据 |
- int32_t httpdns_service_init();
0个参数 |
类型 |
参数含义 |
数值说明 |
备注 |
参数 |
|
httpdns 使用curl初始化类型 |
CURL_GLOBAL_ALL |
- int32_t httpdns_service_destroy()
0个参数 |
类型 |
参数含义 |
数值说明 |
备注 |
参数 |
|
httpdns使用的curl释放空间的线程 |
|
- int32_t httpdns_resolve_gslb(char sn, char device_type, int timeout_ms,httpdns_finished_notify cb,void *userdata);
2个参数 |
类型 |
参数含义 |
数值说明 |
备注 |
参数1 |
sn |
设备sn 号 |
|
|
参数2 |
device_type |
设备deviceypeID |
|
参数3 |
timeout_ms |
请求超时时间(Millisecond |
|
参数4 |
cb |
用户回调处理的函数,通知用户请求dns完成 |
|
参数5 |
userdata |
用户回调处理的数据 |
-int httpdns_getips_by_host(char host_name, char ip);
1个返回值 |
类型 |
参数含义 |
数值说明 |
备注 |
返回值 |
int |
-1 失败, 0 成功 |
|
参数 1 |
host_name |
char* |
要查训的hostname |
|
|
参数 2 |
ip |
char* |
查询到对应ip 返回给该参数 |
- 测试代码以及实例
- sample 目录下的测试文件httpdns_samplae.c
- 测试方式,测试调用接口已经在测试代码写好,如果测试 host name 直接编译运行就行
- make package/httpdns/insall -j1 V=s
- ./httpdns_samplae