TsgcHTTP1Client é um componente não visual que herda do componente indy TIdHTTP e adiciona algumas novas propriedades.
Este componente está localizado na unit sgcHTTP.
Permite que você configure como conectar a servidores SSL/TLS seguros utilizando o protocolo HTTP/1.
ALPNProtocols: lista dos protocolos ALPN que serão enviados ao servidor.
RootCertFile: caminho para o arquivo de certificado raiz.
CertFile: caminho para o arquivo de certificado.
KeyFile: caminho para o arquivo de chave do certificado.
Password: se o certificado estiver protegido por senha, defina-a aqui.
VerifyCertificate: se o certificado deve ser verificado, habilite esta propriedade. Utilize o evento OnSSLVerifyPeer para personalizar a verificação SSL.
VerifyDepth: é uma propriedade Integer que representa o número máximo de links permitidos quando a verificação é realizada para o certificado X.509.
Version: por padrão utiliza TLS 1.0. Se o servidor exigir uma versão TLS superior, ela pode ser selecionada aqui.
Proxy: aqui você pode definir se deseja conectar através de um servidor proxy; você pode conectar aos seguintes servidores proxy:
pxyHTTP: Servidor HTTP Proxy.
pxySocks4: SOCKS4 Proxy Server.
pxySocks4A: Servidor Proxy SOCKS4A.
pxySocks5: Servidor SOCKS5 Proxy.
IOHandler: selecione qual biblioteca você utilizará para conectar usando TLS.
iohOpenSSL: usa a biblioteca OpenSSL e é o padrão para os componentes Indy. Requer a implantação das bibliotecas OpenSSL para win32/win64.
iohSChannel: utiliza o Secure Channel, que é um protocolo de segurança implementado pela Microsoft para Windows. Não requer a implantação das bibliotecas OpenSSL. Funciona somente no Windows 32/64 bits.
OpenSSL_Options: configuração das bibliotecas openSSL.
APIVersion: permite definir qual API OpenSSL será usada.
oslAPI_1_0: usa a API 1.0 do OpenSSL, é a mais recente suportada pelo Indy
oslAPI_1_1: usa a API 1.1 do OpenSSL, requer nossa biblioteca Indy personalizada e permite usar as bibliotecas OpenSSL 1.1.1 (com suporte a TLS 1.3).
oslAPI_3_0: utiliza a API 3.0 do OpenSSL, requer nossa biblioteca Indy personalizada e permite utilizar as bibliotecas OpenSSL 3.0.0 (com suporte a TLS 1.3).
LibPath: aqui você pode configurar onde as bibliotecas OpenSSL estão localizadas
oslpNone: este é o padrão. As bibliotecas OpenSSL devem estar na mesma pasta do binário ou em um caminho conhecido.
oslpDefaultFolder: define automaticamente o caminho do OpenSSL onde as bibliotecas devem estar localizadas para todas as personalidades da IDE.
oslpCustomFolder: se esta for a opção selecionada, defina o caminho completo na propriedade LibPathCustom.
LibPathCustom: quando LibPath = oslpCustomFolder, defina aqui o caminho completo onde as bibliotecas OpenSSL estão localizadas.
UnixSymLinks: habilita ou desabilita o carregamento de SymLinks em sistemas Unix (por padrão está habilitado, exceto no OSX64):
oslsSymLinksDefault: por padrão, os symlinks são habilitados, exceto em OSX64 (o macOS Monterey e posteriores falham ao tentar carregar a biblioteca sem uma versão).
oslsSymLinksLoadFirst: carrega os symlinks primeiro, antes de tentar carregar as bibliotecas versionadas.
oslsSymLinksLoad: carrega os symlinks após tentar carregar as bibliotecas versionadas.
oslsSymLinksDontLoad: não carrega os SymLinks.
MinVersion: defina aqui a versão mínima que o cliente utilizará para se conectar a um servidor seguro. Por padrão, o valor é tlsUndefined, o que significa que a versão mínima é a mesma definida na propriedade Version. Exemplo: se você quiser que o cliente conecte apenas utilizando TLS 1.2 ou TLS 1.3, defina os seguintes valores.
SSLOptions.Version := tls1_3;
SSLOptions.OpenSSL_Options.MinVersion := tls1_2;
X509Checks: utilize esta propriedade para habilitar validações adicionais de certificado X509:
Mode: selecione quais opções serão validadas
oslx509chHostName: verifica o hostname do certificado.
oslx509chIPAddress: verifica o endereço ip do certificado.
HostName: define o hostname se ele for diferente do da requisição.
IPAddress: defina o endereço ip se for diferente do da requisição.
SChannel_Options: permite que você utilize um certificado do Windows Certificate Store.
CertHash: é o Hash do certificado. Você pode encontrar o Hash do certificado executando um comando dir no powershell.
CipherList: aqui você pode definir quais Ciphers serão usados (separados por ":"). Exemplo: CALG_AES_256:CALG_AES_128
CertStoreName: o nome do store onde o certificado está armazenado. Selecione um dos seguintes:
scsnMY (o padrão)
scsnCA
scsnRoot
scsnTrust
CertStorePath: o caminho de armazenamento onde o certificado está armazenado. Selecione um dos seguintes:
scspStoreCurrentUser (o padrão)
scspStoreLocalMachine
Se a propriedade Log estiver habilitada, salva as mensagens do socket em um arquivo de log especificado, útil para depuração.
LogOptions.FileName: caminho completo para o nome do arquivo.
Permite que você se autentique utilizando OAuth2 ou JWT.
Por padrão, o HTTP1Client utiliza requisições bloqueantes, portanto, após chamar um método de requisição HTTP, o cliente aguarda a resposta do servidor. Alternativamente, você pode utilizar métodos assíncronos para executar essas requisições HTTP em uma thread secundária, evitando bloquear a thread onde a requisição é chamada. Os seguintes métodos assíncronos estão implementados:
Após chamar estes métodos, em vez de aguardar a resposta, o código continua para a próxima linha, e a resposta pode ser tratada utilizando o evento OnAsyncResponse.
procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);
Se houver qualquer erro ao processar a requisição assíncrona, a exceção será gerada no evento OnAsyncException.
Solicita um método GET a um servidor HTTPs usando TLS 1.2
oHTTP := TsgcHTTP1Client.Create(nil);
Try
oHTTP.TLSOptions.Version := tls1_2;
ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
oHTTP.Free;
End;
Requisita um método GET a um servidor HTTPs usando openSSL 1.1 e TLS 1.3
oHTTP := TsgcHTTP1Client.Create(nil);
Try
oHTTP.TLSOptions.OpenSSL_Options.APIVersion := oslAPI_1_1;
oHTTP.TLSOptions.Version := tls1_3;
ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
oHTTP.Free;
End;
Solicite um método POST assíncrono e leia a resposta utilizando o OnAsyncResultEvent.
procedure OnAsyncExceptionEvent(Sender: TObject; const aThread:
TsgcThread; const E: Exception);
begin
Log(E.Message);
end;
procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);
begin
if aResponse.ResponseCode = 200 then
Log('ok', aRequest.Response)
else
Log('error', aRequest.Response);
end;
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.OnAsyncResult := OnAsyncResultEvent;
oHTTP.OnAsyncException := OnAsyncResultEvent;
oRequest := TStringStream.Create('body');
oResponse := TStringStream.Create('');
oHTTP.PostAsync('https://localhost/test', oRequest, oResponse);
Faça uma requisição com o método GET a um servidor HTTPs usando SChannel para Windows.
oHTTP := TsgcHTTP1Client.Create(nil);
Try
oHTTP.TLSOptions.IOHandler := iohSChannel;
oHTTP.TLSOptions.Version := tls1_2;
ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
oHTTP.Free;
End;
Solicite o método SSE para obter eventos de dados
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.OnSSEMessage := OnSSEMessageEvent;
oHTTP.GetSSE('https://www.yoursite.com/sse');
procedure OnSSEMessageEvent(Sender: TObject; const aMessage: string; var Cancel: Boolean);
begin
ShowMessage(aMessage);
end;
OnSSEMessage
O evento é chamado quando uma nova mensagem SSE é recebida.
OnSSLVerifyPeer
Se a verificação de certificado estiver habilitada, neste evento você pode verificar e decidir se aceita o certificado do servidor.
OnSSLGetHandler
Este evento é gerado antes da criação do handler SSL. Você pode criar seu próprio handler SSL aqui (ele precisa ser herdado de TIdServerIOHandlerSSLBase ou TIdIOHandlerSSLBase) e definir as propriedades necessárias.
OnSSLAfterCreateHandler
Se nenhum objeto SSL personalizado foi criado, um padrão é criado usando o handler OpenSSL. Você pode acessar as propriedades do handler SSL e modificá-las se necessário.
OnAsyncResult
O evento é chamado após solicitar um método assíncrono (utilizando os métodos GetAsync, PutAsync...). Utilize o parâmetro Response para saber o resultado da requisição.
OnAsyncException
Se houver algum erro ao processar uma requisição assíncrona, este evento é chamado com a exceção gerada.