QuickStart
Jedno żądanie HTTP/3
Utwórz klienta, podepnij trzy zdarzenia, wywołaj Get. Odpowiedź wraca jako tekst, a kod statusu dociera w OnResponse.
uses
Classes, SysUtils,
sgcQUIC, sgcHTTP3_Classes;
procedure TfrmHTTP3Client.FormCreate(Sender: TObject);
begin
FClient := TsgcHTTP3Client.Create(nil);
FClient.OnConnect := OnH3Connect;
FClient.OnError := OnH3Error;
FClient.OnResponse := OnH3Response;
FClient.TLSOptions.VerifyCertificate := True;
FClient.ConnectTimeout := 10000;
FClient.ReadTimeout := 30000;
FClient.UserAgent := 'sgcWebSockets/HTTP3Client';
end;
procedure TfrmHTTP3Client.btnGetClick(Sender: TObject);
var
vResult: string;
begin
try
vResult := FClient.Get('https://www.google.com/');
memoBody.Lines.Text := vResult;
DoLog('Response received: ' + IntToStr(Length(vResult)) + ' bytes');
except
on E: Exception do
DoLog('Error: ' + E.Message);
end;
end;
Post, Put i Delete mają ten sam kształt, a każde ma przeciążenie ze strumieniem dla treści, której nie chcesz trzymać w tekście. Connect(const aHost: string; aPort: Integer = 443) otwiera połączenie przed pierwszym żądaniem, gdy chcesz rozdzielić oba kroki.
procedure TfrmHTTP3Client.OnH3Connect(Sender: TObject);
begin
DoLog('Connected to ' + FClient.Host + ':' + IntToStr(FClient.Port));
end;
procedure TfrmHTTP3Client.OnH3Error(Sender: TObject; const aError: string);
begin
DoLog('Error: ' + aError);
end;
procedure TfrmHTTP3Client.OnH3Response(Sender: TObject;
const aResponse: TsgcHTTP3Response);
begin
DoLog('Status: ' + IntToStr(aResponse.StatusCode));
memoHeaders.Lines.Assign(aResponse.Headers);
end;
Odczyt FClient.Host i FClient.Port wewnątrz OnConnect to dokładnie to, do czego służą te dwie właściwości. Raportują połączenie, nie konfigurują go.
uses
Classes, SysUtils,
sgcIdSSLOpenSSLHeaders;
procedure TfrmQUICClient.FormCreate(Sender: TObject);
begin
DoLog('OpenSSL QUIC Support:');
DoLog(' quictls API: ' +
BoolToStr(IsOpenSSL_QUIC_TLS_Available, True));
DoLog(' Builtin QUIC (3.2+): ' +
BoolToStr(IsOpenSSL_QUIC_Available, True));
end;
Uruchom to raz przed czymkolwiek innym. Jeśli oba zwrócą false, OpenSSL obok twojego pliku wykonywalnego nie ma QUIC, a każda późniejsza awaria połączenia jest objawem tego jednego faktu, a nie sieci.