如何使用 okhttp DnsOverHttps 包使用多个 DoH 提供程序?
Posted
技术标签:
【中文标题】如何使用 okhttp DnsOverHttps 包使用多个 DoH 提供程序?【英文标题】:How to use multiple DoH providers using okhttp DnsOverHttps package? 【发布时间】:2021-12-22 21:28:44 【问题描述】:假设我想先尝试 Cloudflare DoH,然后在失败的情况下回退到 Google 的 DoH,我该怎么做?
不过,使用单个提供程序非常简单。
val appCache = Cache(File("cacheDir", "okhttpcache"), 10 * 1024 * 1024)
val bootstrapClient = OkHttpClient.Builder().cache(appCache).build()
val dns = DnsOverHttps.Builder().client(bootstrapClient)
.url("https://dns.google/dns-query".toHttpUrl())
.bootstrapDnsHosts(InetAddress.getByName("8.8.4.4"), InetAddress.getByName("8.8.8.8"))
.build()
val client = bootstrapClient.newBuilder().dns(dns).build()
【问题讨论】:
【参考方案1】:您需要实现自己的 Dns 来链接调用。
请参阅https://github.com/yschimke/okurl/blob/0abaa8510dd5466d5e9a08ebe33a009c491749bf/src/main/kotlin/com/baulsupp/okurl/network/DnsSelector.kt 以获取委托给另一个 Dns 实现的示例。您将需要两名代表并调用一名,然后有条件地调用另一名。
【讨论】:
以上是关于如何使用 okhttp DnsOverHttps 包使用多个 DoH 提供程序?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Volley 和 OkHttp 时如何配置 Http 缓存?