10

使用以下代码,我可以获得 IPv4 网站的内容:

uses 
  IdHttp;

IdHttp1 := TIdHttp.Create(nil);
try
  Result := IdHttp1.Get('http://www.heise.de/')
finally
  IdHttp1.Free;
end;

但是当我尝试连接到 IPv6 网站时,我收到了 Socket Error #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 网站?

4

1 回答 1

12

TIdTCPClient需要告知是使用 IPv4 还是 IPv6 进行套接字和主机名到 IP 的解析。这是使用该TIdTCPClient.IPVersion属性完成的。但是,TIdHTTP这是一种特殊情况,因为它在TIdTCPClient内部管理属性和连接,包括IPVersion. 根据请求的 URL 设置TIdHTTPIPVersion为了请求一个包含 IPv6 主机名的 URL,它需要用括号括起来,例如:

Result := IdHttp1.Get('http://[www.six.heise.de]/')
于 2013-03-01T21:39:27.797 回答