[QHttpRequest]使用自定义 DNS 来应对 DNS 劫持

为了保证业务的稳定性,避免在由于用户的 DNS 服务器返回错误的 IP 地址,造成程序无法正常运行的情况,QHttpRequest 新增了一个 OnDnsLookup 事件,以便让用户自己处理 DNS 请求。

举个例子:我们要获取 https://blog.qdac.cc 的内容,如果我们指定了 OnDnsLookup 事件,并且设置 DnsLookupOrder 为 dloEventFirst,那么当我们通过 QHttpRequest 来获取 https://blog.qdac.cc 时,就会触发 OnDnsLookup 事件,我们在其中返回正确的地址就可以了。如果我们不予处理,则会使用用户默认的 DNS 解析结果。获取的 DNS 解析结果会缓存下来,以便后面继续使用。目前版本暂不支持 DNS 的 TTL,将来可能会考虑,由此,如果您的DNS 在运营过程中发生改变,需要重启程序才能生效。后面的版本会解决这一问题。

procedure TfrmMain.DoHttpDnsLookup(Sender: TObject; const AHost: QStringW; var Addr: QStringW);
begin
if AHost='blog.qdac.cc' then
   Addr:='101.201.70.65';
end;

分享到: