
dnsId 参数,用于域名解析鉴权。dnsKey 参数,加密方式为 DES 时传入此项。dnsKey 参数,加密方式为 AES 时传入此项。appkey 鉴权信息。HttpDNSLibs\\HTTPDNS_ANDROID_xxxx.aar 拷贝至应用 libs 相应位置。build.gradle 文件中,添加如下配置:android {// ...repositories {flatDir {dirs 'libs'}}}dependencies {// ...implementation(name: 'HTTPDNS_Android_xxxx', ext: 'aar')// V4.3.0版本开始增加了本地数据存储,需增加room依赖引入。implementation "androidx.room:room-rxjava2:2.2.0"}
<dependency><groupId>io.github.dnspod</groupId><artifactId>httpdns-sdk</artifactId><version>4.4.0</version><type>aar</type></dependency><!-- 国际站sdk --><dependency><groupId>io.github.dnspod</groupId><artifactId>httpdns-sdk</artifactId><version>4.4.0-intl</version><type>aar</type></dependency>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.INTERNET" /><!-- 用于获取手机imei码进行数据上报,非必须 --><uses-permission android:name="android.permission.READ_PHONE_STATE" />
<?xml version="1.0" encoding="utf-8"?><manifest ... ><application android:networkSecurityConfig="@xml/network_security_config"... >...</application></manifest>
<?xml version="1.0" encoding="utf-8"?><network-security-config><base-config cleartextTrafficPermitted="true" /></network-security-config>
setUseExpiredIpEnable(true) 和 setCachedIpEnable(true) 来实现乐观 DNS 缓存。preLookupDomains(String... domainList)。persistentCacheDomains(String... domainList)、预解析能力 preLookupDomains(String... domainList),以确保解析结果的准确性。DnsConfig dnsConfigBuilder = DnsConfig.Builder()//(必填)dns 解析 id,即授权 id,腾讯云官网(https://console.tencentcloud.com/httpdns)申请获得,用于域名解析鉴权.dnsId("xxx")//(必填)dns 解析 key,即授权 id 对应的密钥,在开发配置(https://console.tencentcloud.com/httpdns/configure)中获得,用于域名解析鉴权.dnsKey("xxx")// 【V4.5.0版本废弃】由sdk内部调度//(必填)Channel为desHttp()或aesHttp()时使用 43.132.43.43(默认填写这个就行)。.dnsIp("xxx")//(可选)channel配置:基于 HTTP 请求的 DES 加密形式,默认为 desHttp(),另有 aesHttp() 可选。.desHttp()//(可选)日志粒度,如开启Debug打印则传入"Log.VERBOSE".logLevel(Log.VERBOSE)//(可选)预解析域名,请填写完整域名,填写形式:"www.baidu.com", "www.qq.com",建议不要设置太多预解析域名,当前限制为最多 8 个域名。仅在初始化时触发。.preLookupDomains("www.baidu.com", "www.qq.com")//(可选)解析缓存自动刷新,请填写完整域名,填写形式:"www.baidu.com", "www.qq.com"。配置的域名会在 TTL * 75% 时自动发起解析请求更新缓存,实现配置域名解析时始终命中缓存。此项建议不要设置太多域名,当前限制为最多 8 个域名。与预解析分开独立配置。.persistentCacheDomains("www.baidu.com", "www.qq.com")// (可选) IP 优选,以 IpRankItem(hostname, port) 组成的 List 配置, port(可选)默认值为 8080。例如:IpRankItem("qq.com", 443)。sdk 会根据配置项进行 socket 连接测速情况对解析 IP 进行排序,IP 优选不阻塞当前解析,在下次解析时生效。当前限制为最多 10 项。.ipRankItems(ipRankItemList)//(可选)手动指定网络栈支持情况,仅进行 IPv4 解析传 1,仅进行 IPv6 解析传 2,进行 IPv4、IPv6 双栈解析传 3。默认为根据客户端本地网络栈支持情况发起对应的解析请求。.setCustomNetStack(3)//(可选)设置是否允许使用过期缓存,默认false,解析时先取未过期的缓存结果,不满足则等待解析请求完成后返回解析结果。// 设置为true时,会直接返回缓存的解析结果,没有缓存则返回0;0,用户可使用localdns(InetAddress)进行兜底。且在无缓存结果或缓存已过期时,会异步发起解析请求更新缓存。因异步API(getAddrByNameAsync,getAddrsByNameAsync)逻辑在回调中始终返回未过期的解析结果,设置为true时,异步API不可使用。建议使用同步API (getAddrByName,getAddrsByName)。.setUseExpiredIpEnable(false)//(可选)设置是否启用本地缓存(Room),默认false.setCachedIpEnable(false)//(可选)设置域名解析请求超时时间,默认为2000ms.timeoutMills(2000)// (可选) DNS 请求的 ECS(EDNS-Client-Subnet)值,默认情况下 HTTPDNS 服务器会查询客户端出口 IP 为 DNS 线路查询 IP,可以指定线路 IP 地址。支持 IPv4/IPv6 地址传入.routeIp("XXX")//(可选)【V4.4.0 废弃】 sdk日志上报能力由控制台控制.enableReport(true)// 以build()结束.build();MSDKDnsResolver.getInstance().init(this, dnsConfigBuilder);
43.132.43.43。43.132.43.43/43.132.55.55 接入。val host = System.getProperty("http.proxyHost")val port = System.getProperty("http.proxyPort")if (null != host && null != port) {// 本地使用了 HTTP 代理}

xw.qq.com 的请求最终发往了 IP 为 183.3.226.35 的服务器。
xw.qq.com 的请求最终发往了 IP 为 183.3.226.35 的服务器。URL oldUrl = new URL(url);URLConnection connection = oldUrl.openConnection();// 获取HTTPDNS域名解析结果String ips = MSDKDnsResolver.getInstance().getAddrByName(oldUrl.getHost());String[] ipArr = ips.split(";");if (2 == ipArr.length && !"0".equals(ipArr[0])) { // 通过 HTTPDNS 获取 IP 成功,进行 URL 替换和 HOST 头设置String ip = ipArr[0];String newUrl = url.replaceFirst(oldUrl.getHost(), ip);connection = (HttpURLConnection) new URL(newUrl).openConnection(); // 设置 HTTP 请求头 Host 域名connection.setRequestProperty("Host", oldUrl.getHost());}
www.qq.com,通过 HTTPDNS 解析出来的 IP 为 192.168.0.111,则访问方式如下:curl -H "Host:www.qq.com" http://192.168.0.111/aaa.txt
String host = System.getProperty("http.proxyHost");String port= System.getProperty("http.proxyPort");if (null != host && null != port) {// 使用了本地代理模式}
文档反馈