Hou*_*man 6 dns android kotlin okhttp
我想创建一个自定义 DNS,以将 CloudFlare 1.1.1.1 和 1.0.0.1 用于我的所有 RetroFit 连接。这应该取代系统 DNS。
所以我这样做了:
import okhttp3.Dns
import java.net.InetAddress
class CustomDns : Dns {
override fun lookup(hostname: String): List<InetAddress> {
TODO("Not yet implemented")
}
}
Run Code Online (Sandbox Code Playgroud)
我对如何实现抽象查找功能有点迷失。
文档说:
返回主机名的 IP 地址,按照 OkHttp 尝试的顺序排列。如果与某个地址的连接失败,OkHttp 将重试与下一个地址的连接,直到建立连接、IP 地址集耗尽或超出限制。abstract fun Lookup(hostname:String):List
这是否意味着我创建了一个 HashMap。键将是我的 API 的域,值将包含我的 API 解析到的 IP 地址列表?对我来说似乎不太合适。
有没有办法在此实现中仅使用 1.1.1.1 作为 DNS 解析器?
如果您愿意通过 Https 使用 Dns,那么您可以使用 okhttp-doh 连接到 1.1.1.1
val appCache = Cache(File("cacheDir", "okhttpcache"), 10 * 1024 * 1024)
val bootstrapClient = OkHttpClient.Builder().cache(appCache).build()
val dns = DnsOverHttps.Builder().client(bootstrapClient)
.url("https://1.1.1.1/dns-query".toHttpUrl())
.build()
val client = bootstrapClient.newBuilder().dns(dns).build()
Run Code Online (Sandbox Code Playgroud)
如果您想使用常规 DNS,但您需要在应用程序外部的设备上进行这些更改。或者提供您自己的实现,也许基于 Netty 或类似的实现?
| 归档时间: |
|
| 查看次数: |
6563 次 |
| 最近记录: |