Mit folgendem Code kann ich den Inhalt einer IPv4-Website erhalten:Wie konfiguriere ich Indy v10 zur Unterstützung von IPv4 + IPv6?
uses
IdHttp;
IdHttp1 := TIdHttp.Create(nil);
try
Result := IdHttp1.Get('http://www.heise.de/')
finally
IdHttp1.Free;
end;
aber wenn ich versuche, eine IPv6-Website zu verbinden I Sockel Error # 11004 erhalten:
IdHttp1 := TIdHttp.Create(nil);
try
Result := IdHttp1.Get('http://www.six.heise.de/')
finally
IdHttp1.Free;
end;
Ich kann ping www.six.heise.de geht es gut (IP 2a02: 2e0: 3fe: 100 :: 6 :) und Firefox zeigt die Website ohne Probleme an.
Was muss ich in Indy ändern (neuester V10-Build von SVN), um sowohl IPv4- als auch IPv6-Websites zu verbinden?
Dies funktioniert, aber ist eine ziemlich seltsame Lösung, wie ein Web-Browser http nicht akzeptieren: // [www .six.heise.de] /. Gibt es eine Möglichkeit, zu dementieren, ob eine Website ipv4 oder ipv6 ist, und im Fall von ipv6 die Klammern zur URL hinzufügen? – Casady
IPv6-Adressen, die in URLs verwendet werden, müssen nach [RFC 2732] (http://tools.ietf.org/html/rfc2732) geklammert werden. Hostnamen nicht, aber 'TIdHTTP' hat derzeit keine andere Möglichkeit zu wissen, wann IPv4 gegen IPv6 zu verwenden ist. Wenn ein Webbrowser eine Verbindung zu einer URL herstellt, löst er den Hostnamen über DNS auf, um die verfügbaren IPv4/IPv6-Adressen abzurufen, und versucht dann, eine Verbindung zu ihnen herzustellen, bis einer erfolgreich ist. 'TIdTCPClient' löst den Hostnamen auf, nachdem' IPVersion' gesetzt wurde und ein IPv4/IPv6-Socket erstellt wurde. Es versucht nicht, eine Verbindung zu mehreren IPs herzustellen. Das muss sich in Zukunft ändern. –
Vorläufig können Sie 'TIdDNSResolver' verwenden, um eine manuelle DNS-Suche nach dem Hostnamen durchzuführen, bevor Sie' TIdHTTP' mit einer entsprechend formatierten URL verwenden. –