HTTP/2 クライアントはブロッキングおよびノンブロッキングモードで動作できます。内部的にコンポーネントはセカンダリスレッドで動作し、リクエストは非同期に処理されますが、リクエストを呼び出してそのリクエストが完了するまで待機することもできます。
以下に、クライアントがHTTP/2サーバーにHTMLページを要求する方法と、両方のモードで動作させる方法の例を示します。
https://www.google.com の以下のURLを取得し、クライアントが完全なレスポンスを受信したときに通知を受け取ります。GETASYNC メソッドを呼び出した後、プロセスは継続し、レスポンスが受信されると OnHTTP2Response イベントが呼び出されます。
oClient := TsgcHTTP2Client.Create(nil);
oClient.OnHTTP2Response := OnHTTP2ResponseEvent;
oClient.GetAsync('https://www.gooogle.com');
procedure OnHTTP2ResponseEvent(Sender: TObject; const Connection: TsgcHTTP2ConnectionClient;
const Request: TsgcHTTP2RequestProperty; const Response: TsgcHTTP2ResponseProperty);
begin
ShowMessage(Response.Headers.Text + #13#10 + Response.DataString);
end;
URL https://www.google.com を取得し、クライアントが完全な応答を受信するまで待機します。GET メソッドを呼び出した後、応答を受信するかタイムアウトになるまでプロセスが待機します。
HTTP/2 クライアントの Response プロパティを使用して生のレスポンスデータにアクセスできます。ここでは生のヘッダー、ステータスレスポンスコード、文字セットなどにアクセスできます。
oClient := TsgcHTTP2Client.Create(nil);
vResponse := oClient.Get('https://www.gooogle.com');
if oClient.Response.Status = 200 then
ShowMessage('Response from server: ' + vResponse)
else
ShowMessage('Response Code: ' + IntToStr(oClient.Response.Status));