Как настроить 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]/')