QuickStart
Eine HTTP/3-Anfrage
Erzeuge den Client, verdrahte drei Ereignisse, rufe Get auf. Die Antwort kommt als String zurück und der Statuscode trifft in OnResponse ein.
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 und Delete haben dieselbe Form, und jede hat eine Stream-Überladung für einen Body, den du nicht in einem String halten möchtest. Connect(const aHost: string; aPort: Integer = 443) öffnet die Verbindung vor der ersten Anfrage, wenn du beides trennen willst.
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;
FClient.Host und FClient.Port innerhalb von OnConnect zu lesen, ist genau das, wofür diese beiden Eigenschaften da sind. Sie melden die Verbindung, sie konfigurieren sie nicht.
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;
Führe dies einmal vor allem anderen aus. Wenn beide false melden, hat das OpenSSL neben deiner ausführbaren Datei kein QUIC, und jeder weitere Verbindungsfehler ist ein Symptom dieser einen Tatsache und nicht des Netzwerks.