如何使用 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 提供程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用okhttp上传文件?

如何使用 OkHttp 连接 SPDY 网站?

如何使用 OkHttp 发布 JSON 数据

使用 Volley 和 OkHttp 时如何配置 Http 缓存?

OkHttp初探:如何使用OkHttp进行Get或Post请求?Kotlin版本。

OkHttp初探2:如何使用OkHttp进行下载封装?带进度条?Kotlin+Flow版本。