TsgcHTTP3Client

TsgcHTTP3Client は QUIC 上で HTTP リクエストを送信する HTTP/3 クライアント(RFC 9114)で、同期および非同期の両方のリクエストメソッドをサポートしています。

はじめに

TsgcHTTP3Client は RFC 9114 で定義された HTTP/3 クライアントを実装しています。HTTP/3 は QUIC(TLS 1.3 を内蔵した UDP ベースのトランスポート)上で HTTP リクエストとレスポンスを転送するため、すべてのリクエストはヘッドオブラインブロッキングなしで暗号化された多重化接続を通じて送信されます。このクライアントは OpenSSL 3.5 以降が提供するネイティブ QUIC クライアント上に構築されているため、外部の HTTP/3 ライブラリは不要です。

このコンポーネントはリクエストを同期的に(呼び出しがブロックしてレスポンスボディを返す)または非同期的に(呼び出しが即座に返り、レスポンスが OnResponse イベントで通知される)送信できます。

同期リクエストを送信するには、以下の手順に従ってください:

1. TsgcHTTP3Client の新しいインスタンスを作成し、サーバーの Host と Port を設定します。

2. Connect を呼び出して QUIC 接続を開き、Get でリクエストを送信し(レスポンスボディを返します)、完了したら Disconnect を呼び出します。使用例:


    oClient := TsgcHTTP3Client.Create(nil);
    oClient.Host := 'www.example.com';
    oClient.Port := 443;
    oClient.Connect(oClient.Host, oClient.Port);
    vResponse := oClient.Get('https://www.example.com/');
    ShowMessage(vResponse);
    oClient.Disconnect;

リクエストを非同期で送信するには、OnResponse イベントを割り当てて GetAsync を呼び出します。呼び出しは即座に返り、レスポンスはイベントで通知されます。使用例:


    oClient := TsgcHTTP3Client.Create(nil);
    oClient.OnResponse := OnResponseEvent;
    oClient.GetAsync('https://www.example.com/');

    procedure OnResponseEvent(Sender: TObject; const Response: TsgcHTTP3Response);
    begin
      ShowMessage(Response.DataString);
    end;

リファレンス

主なプロパティ

名前説明
Hostクライアントが接続する HTTP/3 サーバーの IP アドレスまたは DNS 名。
PortHTTP/3(QUIC)サーバーへの接続に使用する UDP ポート。
ConnectTimeoutクライアントが QUIC および TLS 1.3 ハンドシェイクの完了を待機する最大時間(ミリ秒)。
TLSOptionsQUIC 接続で使用される TLS 1.3 パラメーター(証明書、検証、ALPN)を設定します。
Settings接続確立時にサーバーに通知される HTTP/3 SETTINGS パラメータ。

主なメソッド

名前説明
ConnectQUIC 接続を開き、TLS 1.3 および HTTP/3 ハンドシェイクを実行します。
Get同期 HTTP/3 GET リクエストを送信し、レスポンスボディを返します。
Postボディペイロードを含む同期 HTTP/3 POST リクエストを送信します。
GetAsyncノンブロッキングの HTTP/3 GET を送信します。返信は OnResponse で到着します。
DisconnectHTTP/3(QUIC)接続を閉じます。

主なイベント

名前説明
OnResponseクライアントがサーバーからの完全なレスポンス (ステータス、ヘッダー、ボディ) を受信したときに発生します。
OnErrorリクエストまたは接続エラーが発生したときに発生します。
OnConnectHTTP/3 接続が確立された後に発生します。
OnDisconnectHTTP/3 接続が閉じられた後に発生します。

完全な使用例

次の使用例は HTTP/3 接続を開き、GET および POST リクエストを送信して接続を閉じます。


var
  oClient: TsgcHTTP3Client;
  vResponse: string;
begin
  oClient := TsgcHTTP3Client.Create(nil);
  try
    oClient.Host := 'www.example.com';
    oClient.Port := 443;
    oClient.ConnectTimeout := 10000;
    oClient.Connect(oClient.Host, oClient.Port);
    if oClient.Connected then
    begin
      vResponse := oClient.Get('https://www.example.com/');
      ShowMessage(vResponse);
      vResponse := oClient.Post('https://www.example.com/api', 'name=value',
        'application/x-www-form-urlencoded');
      ShowMessage(vResponse);
    end;
    oClient.Disconnect;
  finally
    oClient.Free;
  end;
end;

要件