10
用下面的代碼,我可以得到一個IPv4網站的內容:如何配置Indy v10以支持IPv4 + IPv6?
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網站?
這工作,但它是一個比較奇怪的解決方案,如網絡瀏覽器將不接受HTTP:// [WWW .six.heise.de] /。有沒有一種方法來確定一個網站是否是ipv4或ipv6,並且在ipv6的情況下將括號添加到URL中? – Casady 2013-03-01 21:50:23
根據[RFC 2732](http://tools.ietf.org/html/rfc2732),URL中使用的IPv6地址必須加括號。主機名不是,但是「TIdHTTP」目前沒有其他方式提前知道何時使用IPv4 vs IPv6。當瀏覽器連接到URL時,它通過DNS解析主機名以獲取其可用的IPv4/IPv6地址,然後嘗試連接到它們直到成功。 'IPVersion'已設置並且已創建IPv4/IPv6套接字後,'TIdTCPClient'解析主機名。它不會嘗試連接到多個IP。這可能在未來需要改變。 – 2013-03-01 22:08:19
現在,您可以使用'TIdDNSResolver'在使用具有適當格式的URL的'TIdHTTP'之前對主機名進行手動DNS查找。 – 2013-03-01 22:11:11