通过 HTTP 代理查询 Google Public DNS 的 JSON API
通过经代理的 HTTPS 请求获取 DNS 记录,同时让解析器 API 与代理自身的主机名查找保持分离。
HTTP 代理可以把请求送达 DNS-over-HTTPS 服务。对于 Google Public DNS 的 JSON 接口,一次显式查询可以是:
curl --fail --proxy http://proxy.example.net:8080 --noproxy "" \
--get --data-urlencode "name=example.net" \
--data-urlencode "type=A" \
https://dns.google/resolve
代理把 HTTPS 连接送达 dns.google。HTTP 代理列表 是在允许使用公共代理访问的前提下,为这次公开查询挑选候选的一个地方。Google 的解析器负责回答 name 参数。这既不是要求代理返回它自己的 DNS 缓存,也不是改动其他应用所使用的 DNS 配置。
要读取 JSON 中的 Status 和返回的记录,而不只是 HTTP 状态。一个成功送达的 HTTP 响应也可能描述一次 DNS 失败。把 type 改成所需的记录类型,例如 AAAA 或 MX;一次 A 查询并不覆盖全部记录类型。
该端点的 JSON 格式是有文档的 Google API。标准的 DoH 线格式客户端改用 DNS 消息和 application/dns-message。普通的 nslookup 调用并不会仅仅因为设置了 HTTPS_PROXY 就获得这两个 HTTP 接口中的任何一个。