使用以下代码,我可以获取IPv4网站的内容:
uses
IdHttp;
IdHttp1 := TIdHttp.Create(nil);
try
Result := IdHttp1.Get('http://www.heise.de/')
finally
IdHttp1.Free;
end;
但是当我尝试连接IPv6网站时,出现套接字错误#11004:
IdHttp1 := TIdHttp.Create(nil);
try
Result := IdHttp1.Get('http://www.six.heise.de/')
finally
IdHttp1.Free;
end;
我可以正常ping通www.six.heise.de(IP 2a02:2e0:3fe:100::6),并且Firefox也能正常显示该网站。
我需要在Indy中进行哪些更改(最新的SVN版本V10构建),才能连接IPv4和IPv6网站?
TIdHTTP
目前没有其他方式事先知道何时使用IPv4和IPv6。当Web浏览器连接到URL时,它通过DNS解析主机名以获取其可用的IPv4 / IPv6地址,然后尝试连接到它们直到其中一个成功为止。TIdTCPClient
在设置了IPVersion
并创建了IPv4 / IPv6套接字之后才解析主机名。它不会尝试连接到多个IP。这可能在未来需要改变。 - Remy LebeauTIdDNSResolver
手动执行主机名的DNS查找,然后使用格式正确的URL使用TIdHTTP
。 - Remy Lebeau