sslvSSLv23 sollte als Voreinstellung erstmal richtig sein. Nur wenn das nicht klappt kann man mit der Funktion prüfen, ob es überhaupt eine "passende" Version gibt.
Der Rückgabewert der Funktion muss ja nicht zwingend ein Integer sein, man kann ihn ja auch auf TIdSSLVersion ändern, wenn man als Defaultrückgabewert sslvSSLv23 nimmt, kann man sie eigentlich immer nutzen.
Aber: SSL1 wird der Funktion als Parameter übergeben und innerhalb der Funktion wird in der For-Schleife am Anfang SSL.SSLOptions.Method := myIdSSLVersion; gesetzt. Damit ist eine Zuweisung nach dem Aufruf der Funktion nicht erforderlich.
Der Rückgabewert ist eigentlich nur dazu da, um zu prüfen, ob die Routine erfolgreich war, man könnte also auch als Rückgabe ein Boolean nehmen.
Delphi-Quellcode:
function GetSSLMethod(sUrl:
string;
var sMessage:
string; ssl: TIdSSLIOHandlerSocketOpenSSL; http: TIdHTTP): Boolean;
var
myIdSSLVersion: TIdSSLVersion;
begin
Result := False;
for myIdSSLVersion := Low(TIdSSLVersion)
to High(TIdSSLVersion)
do begin
SSL.SSLOptions.Method := myIdSSLVersion;
try
http.RedirectMaximum := 0;
http.HandleRedirects := false;
http.Response.Clear;
http.Get(sUrl);
http.Disconnect(True);
http.IOHandler.InputBuffer.Clear;
Result := True;
break;
except
on e:
Exception do begin
case http.ResponseCode
of
301, 302 : sMessage := sMessage + #13 + http.ResponseText;
else
sMessage := sMessage + #13 + AnsiReplaceText(e.
Message, #13#10, '
');
end;
http.Disconnect(True);
http.IOHandler.InputBuffer.Clear;
end;
end;
end;
end;
Delphi-Quellcode:
// Aufruf z. B. so:
if GetSSLMethod('https://was.auch.immer', sMessage, ssl1, http1) then begin
// Hier die zu erledigende Aufgabe einbauen.
end else begin
ShowMessage(sMessage);
end;
@DieDolly
sslvSSLv23 ist eigentlich alles, sowas wie sslvSSL_AlleVerfuegbarenVersionen.
Der Name sslvSSLv23 ist leider eher irreführend, da er etwas anderes suggeriert, als er eigentlich meint.
Der Setter in der
Unit IdSSLOpenSSL sieht so aus:
Delphi-Quellcode:
procedure TIdSSLOptions.SetMethod(const AValue: TIdSSLVersion);
begin
fMethod := AValue;
if AValue = sslvSSLv23 then begin
fSSLVersions := [sslvSSLv2,sslvSSLv3,sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];
end else begin
fSSLVersions := [AValue];
end;
end;