QuickStart
Przebuduj, a potem sięgnij po TLS 1.3
Pierwsza karta to to, jak już wygląda twój istniejący projekt. Druga to jedna nowa linijka, którą warto dodać. Trzecia dowodzi, że jesteś na sgcIndy, a nie na standardowym Indy.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
IdSSLOpenSSL, IdSSLOpenSSLHeaders, StdCtrls;
Twój istniejący projekt już tak wygląda i o to chodzi. Nie ma sgcIdTCPClient ani TsgcIdSSLIOHandlerSocketOpenSSL, ponieważ żadna jednostka ani klasa w bibliotece nie ma prefiksu sgc. Zainstaluj, przebuduj, gotowe.
procedure TFRMHttpClient.btnGoToClick(Sender: TObject);
var
oStream: TStringStream;
begin
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.APIVersion := sslvAPI_3_0;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1_3;
oStream := TStringStream.Create('');
try
IdHTTP1.Get(txtURL.Text, oStream);
finally
FreeAndNil(oStream);
end;
end;
TIdSSLAPIVersion ma elementy sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1 i sslvAPI_3_0. Ani ten typ, ani ta właściwość nie istnieją w standardowym Indy, co czyni ten fragment dowodem w czasie kompilacji, z którą biblioteką budujesz.
procedure TfrmTCPClient.btnConnectClick(Sender: TObject);
begin
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.APIVersion := sslvAPI_3_0;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1_3;
IdTCPClient1.Host := txtHost.Text;
IdTCPClient1.Port := StrToInt(txtPort.Text);
IdSSLIOHandlerSocketOpenSSL1.PassThrough := False;
IdTCPClient1.Connect;
end;
procedure TfrmTCPClient.btnDisconnectClick(Sender: TObject);
begin
IdTCPClient1.Disconnect;
end;
Te same komponenty, te same właściwości, ta sama strona palety. PassThrough := False zamienia zwykłe gniazdo w gniazdo TLS, dokładnie tak jak w standardowym Indy. Odczyt to IdTCPClient1.IOHandler.ReadLn, zapis to IOHandler.Write, bez zmian.