z następującego kodu można uzyskać zawartość na stronie IPv4:Jak skonfigurować Indy v10 do obsługi IPv4 + IPv6?
uses
IdHttp;
IdHttp1 := TIdHttp.Create(nil);
try
Result := IdHttp1.Get('http://www.heise.de/')
finally
IdHttp1.Free;
end;
ale gdy próbuję połączyć się z witryny IPv6 uzyskać Socket Error # 11004:
IdHttp1 := TIdHttp.Create(nil);
try
Result := IdHttp1.Get('http://www.six.heise.de/')
finally
IdHttp1.Free;
end;
mogę ping www.six.heise.de just fine (IP 2a02: 2e0: 3fe: 100 :: 6 :) a Firefox wyświetla stronę bez problemów.
Co muszę zmienić w Indy (najnowsza wersja V10 z SVN), aby połączyć się ze stronami IPv4 i IPv6?
To działa, ale jest dość dziwne rozwiązanie, ponieważ przeglądarka nie akceptuje http: // [www .six.heise.de] /. Czy istnieje sposób na określenie, czy strona internetowa to ipv4 czy ipv6, aw przypadku ipv6 dodać nawiasy do adresu URL? – Casady
Adresy IPv6 używane w adresach URL muszą być nawiasami, według [RFC 2732] (http://tools.ietf.org/html/rfc2732). Nazwy hostów nie, ale 'TIdHTTP' obecnie nie ma innego sposobu, aby wiedzieć z wyprzedzeniem, kiedy używać IPv4 vs IPv6. Kiedy przeglądarka internetowa łączy się z adresem URL, rozwiązuje nazwę hosta za pośrednictwem systemu DNS, aby uzyskać dostępne adresy IPv4/IPv6, a następnie próbuje się połączyć z nimi, dopóki jedna się nie powiedzie. 'TIdTCPClient' rozwiązuje nazwę hosta po ustawieniu' IPVersion' i utworzeniu gniazda IPv4/IPv6. Nie próbuje połączyć się z wieloma adresami IP. To może się zmienić w przyszłości. –
Na razie możesz użyć 'TIdDNSResolver' do ręcznego sprawdzenia DNS nazwy hosta przed użyciem' TIdHTTP' z odpowiednio sformatowanym adresem URL. –