O HTTP/2 Client pode trabalhar em modo bloqueante e não bloqueante; internamente o componente trabalha em um thread secundário e as requisições são processadas de forma assíncrona, mas você pode fazer uma chamada de requisição e aguardar até que esta requisição seja concluída.
Veja abaixo um exemplo de como o cliente pode solicitar uma página HTML a um servidor HTTP/2 e como pode funcionar em ambos os modos.
Obtenha a seguinte url: https://www.google.com e seja notificado quando o cliente receber a resposta completa. Depois de chamar o método GETASYNC, o processo continua e o evento OnHTTP2Response é chamado quando a resposta é recebida.
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;
Obtém a seguinte url: https://www.google.com e aguarda até que o cliente receba a resposta completa. Depois de chamar o método GET, o processo aguarda até que a resposta seja recebida ou o tempo limite seja atingido.
Você pode acessar os dados da Resposta Bruta usando a propriedade Response do cliente HTTP/2. Aqui você pode acessar os Cabeçalhos Brutos, o código de status da resposta, o Charset e mais.
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));