DNS协议的UDP响应大小有限制。它只能包含~500字节。当数据超出限制时,所有DNS服务器都会设置标记"截断"作为回应,但一些(例如谷歌8.8.8.8)没有放任何IP响应其他人只是把修剪列表。像nslookup和dig这样的工具尝试通过TCP询问DNS服务器以获得完整响应,但android却没有。相反,它失败了。失败的代码示例如下。
var host = "prdimg.affili.net";
var addressList = Dns.GetHostEntry(host).AddressList;
Modernhttpclient使用获取IP的方式相同,因此我无法从prdimg.affili.net获取文件。为了解决这个问题,我已经实施了临时解决方案。我使用GooglePublicDnsClient解析DNS,然后使用UriBuilder将主机名更改为已解析的ip。
var builder = new UriBuilder(originalUrl);
builder.Host = ip;
但解决方案有两个缺点
有人可以提出更好的解决方案吗?