HTTP/1

TsgcHTTP1Client jest komponentem niewiizualnym, dziedziczącym po komponencie TIdHTTP indy, i dodającym kilka nowych właściwości.

Ten komponent znajduje się w jednostce sgcHTTP.

TLSOptions

Umożliwia konfigurowanie sposobu łączenia się z bezpiecznymi serwerami SSL/TLS przy użyciu protokołu HTTP/1.

 

ALPNProtocols: lista protokołów ALPN, które zostaną wysłane do serwera.

RootCertFile: ścieżka do pliku certyfikatu głównego.

CertFile: ścieżka do pliku certyfikatu.

KeyFile: ścieżka do pliku klucza certyfikatu.

Password: jeśli certyfikat jest zabezpieczony hasłem, należy je tu podać.

VerifyCertificate: jeśli certyfikat musi być weryfikowany, należy włączyć tę właściwość. Do dostosowania weryfikacji SSL należy użyć zdarzenia OnSSLVerifyPeer.

VerifyDepth: właściwość całkowitoliczbowa określająca maksymalną liczbę ogniw dozwolonych podczas weryfikacji certyfikatu X.509.

Wersja: domyślnie używa TLS 1.0. Jeśli serwer wymaga wyższej wersji TLS, można ją tutaj wybrać.

Proxy: w tej sekcji można określić, czy połączenie ma odbywać się przez serwer proxy. Obsługiwane są następujące serwery proxy:

pxyHTTP: Serwer proxy HTTP.

pxySocks4: Serwer proxy SOCKS4.

pxySocks4A: Serwer proxy SOCKS4A.

pxySocks5: Serwer proxy SOCKS5.

IOHandler: wybierz bibliotekę, której chcesz użyć do połączenia przez TLS.

iohOpenSSL: korzysta z biblioteki OpenSSL i jest domyślnym wyborem dla komponentów Indy. Wymaga wdrożenia bibliotek OpenSSL dla win32/win64.

iohSChannel: używa Secure Channel — protokołu bezpieczeństwa zaimplementowanego przez Microsoft dla systemu Windows. Nie wymaga wdrożenia bibliotek OpenSSL. Działa wyłącznie w systemie Windows 32/64-bit.

OpenSSL_Options: konfiguracja bibliotek OpenSSL.

APIVersion: pozwala określić, które API OpenSSL będzie używane.

oslAPI_1_0: używa API 1.0 OpenSSL; jest to najnowsza wersja obsługiwana przez Indy

oslAPI_1_1: używa interfejsu API 1.1 OpenSSL, wymaga niestandardowej biblioteki Indy i umożliwia korzystanie z bibliotek OpenSSL 1.1.1 (z obsługą TLS 1.3).

oslAPI_3_0: korzysta z API OpenSSL 3.0, wymaga naszej niestandardowej biblioteki Indy i umożliwia używanie bibliotek OpenSSL 3.0.0 (z obsługą TLS 1.3).

LibPath: tutaj można skonfigurować lokalizację bibliotek OpenSSL

oslpNone: wartość domyślna. Biblioteki OpenSSL powinny znajdować się w tym samym folderze co plik binarny lub w znanych ścieżkach systemowych.

oslpDefaultFolder: automatycznie ustawia ścieżkę OpenSSL, w której biblioteki powinny się znajdować dla wszystkich rodzajów projektów IDE.

oslpCustomFolder: jeśli ta opcja jest wybrana, należy zdefiniować pełną ścieżkę we właściwości LibPathCustom.

LibPathCustom: gdy LibPath = oslpCustomFolder, należy tu podać pełną ścieżkę do katalogu, w którym znajdują się biblioteki OpenSSL.

UnixSymLinks: włącz lub wyłącz ładowanie dowiązań symbolicznych w systemach Unix (domyślnie włączone, z wyjątkiem OSX64):

oslsSymLinksDefault: domyślnie dowiązania symboliczne są włączone, z wyjątkiem OSX64 (macOS Monterey i nowsze wersje nie działają przy próbie załadowania biblioteki bez numeru wersji).

oslsSymLinksLoadFirst: wczytaj najpierw dowiązania symboliczne, przed próbą załadowania bibliotek z numerem wersji.

oslsSymLinksLoad: ładuje dowiązania symboliczne po próbie załadowania bibliotek z wersją.

oslsSymLinksDontLoad: nie ładuj dowiązań symbolicznych.

MinVersion: tutaj należy ustawić minimalną wersję, której klient użyje do połączenia z bezpiecznym serwerem. Domyślnie wartość wynosi tlsUndefined, co oznacza, że minimalna wersja jest taka sama jak ustawiona we właściwości Version. Przykład: aby klient łączył się wyłącznie przy użyciu TLS 1.2 lub TLS 1.3, należy ustawić następujące wartości.

 

SSLOptions.Version := tls1_3;

SSLOptions.OpenSSL_Options.MinVersion := tls1_2;

X509Checks: użyj tej właściwości, aby włączyć dodatkowe weryfikacje certyfikatu X509:

Mode: wybierz, które opcje będą walidowane

oslx509chHostName: weryfikuje certyfikat nazwy hosta.

oslx509chIPAddress: weryfikuje adres IP certyfikatu.

HostName: ustaw nazwę hosta, jeśli różni się od żądania.

IPAddress: ustawia adres IP, jeśli różni się od adresu z żądania.

 

SChannel_Options: umożliwia korzystanie z certyfikatu z magazynu certyfikatów systemu Windows.

CertHash: to skrót certyfikatu. Skrót certyfikatu można znaleźć, uruchamiając polecenie dir w programie PowerShell.

CipherList: w tym miejscu można określić, które szyfry będą używane (oddzielone znakiem ":"). Przykład: CALG_AES_256:CALG_AES_128

CertStoreName: nazwa magazynu, w którym przechowywany jest certyfikat. Należy wybrać jedną z następujących wartości:

scsnMY (wartość domyślna)

scsnCA

scsnRoot

scsnTrust

CertStorePath: ścieżka magazynu, w którym przechowywany jest certyfikat. Należy wybrać jedną z następujących opcji:

scspStoreCurrentUser (domyślne)

scspStoreLocalMachine

 

Dziennik

Gdy właściwość Log jest włączona, zapisuje komunikaty gniazda do wskazanego pliku dziennika, co jest przydatne podczas debugowania.

 

LogOptions.FileName: pełna ścieżka do pliku.

 

Uwierzytelnianie

Umożliwia uwierzytelnianie przy użyciu OAuth2 lub JWT.

 

 

Żądania asynchroniczne

Domyślnie HTTP1Client używa żądań blokujących, więc po wywołaniu metody żądania HTTP klient czeka na odpowiedź od serwera. Alternatywnie można użyć metod asynchronicznych do wykonywania żądań HTTP w wątku pomocniczym, co pozwala uniknąć blokowania wątku wywołującego. Zaimplementowane są następujące metody asynchroniczne:

 

 

Po wywołaniu tych metod kod nie czeka na odpowiedź, lecz przechodzi do kolejnej linii, a odpowiedź może być obsługiwana za pomocą zdarzenia OnAsyncResponse.

 


procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
    TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);

Jeśli podczas przetwarzania żądania asynchronicznego wystąpi błąd, wyjątek zostanie zgłoszony w zdarzeniu OnAsyncException.

 

Przykłady

Wysyła żądanie metodą GET do serwera HTTPs z użyciem TLS 1.2


oHTTP := TsgcHTTP1Client.Create(nil);
Try
  oHTTP.TLSOptions.Version := tls1_2;
  ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
  oHTTP.Free;
End;

Wysłanie żądania metodą GET do serwera HTTPS z użyciem openSSL 1.1 i TLS 1.3


oHTTP := TsgcHTTP1Client.Create(nil);
Try
  oHTTP.TLSOptions.OpenSSL_Options.APIVersion := oslAPI_1_1;
  oHTTP.TLSOptions.Version := tls1_3;
  ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
  oHTTP.Free;
End;

Należy zażądać metody Asynchronous POST i odczytać odpowiedź przy użyciu zdarzenia OnAsyncResultEvent.

 


procedure OnAsyncExceptionEvent(Sender: TObject; const aThread:
    TsgcThread; const E: Exception);
begin
  Log(E.Message);
end;
procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
    TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);
begin
  if aResponse.ResponseCode = 200 then
    Log('ok', aRequest.Response)
  else 
    Log('error', aRequest.Response);
end;
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.OnAsyncResult := OnAsyncResultEvent;
oHTTP.OnAsyncException := OnAsyncResultEvent;
oRequest := TStringStream.Create('body');
oResponse := TStringStream.Create('');
oHTTP.PostAsync('https://localhost/test', oRequest, oResponse);

 

Wysyłanie żądania GET do serwera HTTPs przy użyciu SChannel dla Windows.


oHTTP := TsgcHTTP1Client.Create(nil);
Try
  oHTTP.TLSOptions.IOHandler := iohSChannel;
  oHTTP.TLSOptions.Version := tls1_2;
  ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
  oHTTP.Free;
End;

Żądanie metody SSE w celu pobierania zdarzeń danych

 


oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.OnSSEMessage := OnSSEMessageEvent;
oHTTP.GetSSE('https://www.yoursite.com/sse');
 
procedure OnSSEMessageEvent(Sender: TObject; const aMessage: string; var Cancel: Boolean);
begin
  ShowMessage(aMessage);
end;

 

Zdarzenia

OnSSEMessage

 

Zdarzenie jest wywoływane po odebraniu nowej wiadomości SSE.

 

OnSSLVerifyPeer

 

Jeśli weryfikacja certyfikatu jest włączona, w tym zdarzeniu można zweryfikować certyfikat serwera i zdecydować, czy go zaakceptować.

 

OnSSLGetHandler

 

To zdarzenie jest wywoływane przed utworzeniem procedury obsługi SSL. Można tu utworzyć własną procedurę obsługi SSL (musi ona dziedziczyć po TIdServerIOHandlerSSLBase lub TIdIOHandlerSSLBase) i ustawić wymagane właściwości.

 

OnSSLAfterCreateHandler

 

Jeśli nie utworzono niestandardowego obiektu SSL, zostanie on domyślnie utworzony przy użyciu procedury obsługi OpenSSL. Można uzyskać dostęp do właściwości procedury obsługi SSL i modyfikować je w razie potrzeby.

 

OnAsyncResult

 

Zdarzenie jest wywoływane po otrzymaniu odpowiedzi na metodę asynchroniczną (przy użyciu metod GetAsync, PutAsync...). Należy użyć parametru Response, aby poznać wynik żądania.

 

OnAsyncException

 

Jeśli podczas przetwarzania żądania asynchronicznego wystąpi błąd, to zdarzenie jest wywoływane z podniesionym wyjątkiem.