Как настроить Indy v10 для поддержки IPv4 + IPv6?

В следующем коде я могу получить содержимое веб-сайта 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 (последняя версия V10 из SVN) для подключения к веб-сайтам IPv4 и IPv6?

Ответ 1

TIdTCPClient должно быть указано, следует ли использовать IPv4 или IPv6 для своих разрешений сокета и хоста и IP. Это делается с использованием свойства TIdTCPClient.IPVersion. Однако TIdHTTP является особым случаем, поскольку он управляет свойствами TIdTCPClient и внутренним соединением, включая IPVersion. TIdHTTP устанавливает IPVersion на основе запрашиваемого URL-адреса. Чтобы запросить URL-адрес, содержащий имя хоста IPv6, его необходимо скопировать в скобки, например:

Result := IdHttp1.Get('http://[www.six.heise.de]/')