logotipo Blog Giovani Da Cruz
Lazarus

Lazarus: exibir imagem da web com TFPHttpClient

3 min de leitura 397 visualizações

Recuperando e Exibindo uma Imagem da Web

Fala galera da programação, tudo beleza?

A dica de hoje é como podemos recuperar uma imagem da Web através de uma requisição HTTP com o Lazarus.

O nosso exemplo em Lazarus para recuperar uma imagem da web e exibi-la em um componente TImage. Certifique-se de ter a biblioteca fphttpclient instalada em seu Lazarus. Essa biblioteca já deve acompanhar o Lazarus por padrão.

 

O que é a biblioteca fphttpclient?

A biblioteca fphttpclient é uma parte do Free Pascal Runtime Library (FPRRTL) e é uma implementação do cliente HTTP para o ambiente de desenvolvimento Lazarus/Free Pascal. Ela permite que os desenvolvedores criem aplicativos capazes de realizar solicitações HTTP, como fazer downloads de arquivos, acessar APIs da web, enviar dados para servidores, entre outras operações relacionadas à comunicação com servidores web.

O fphttpclient fornece uma maneira fácil e flexível de interagir com servidores web, oferecendo suporte a protocolos HTTP e HTTPS. Ele é especialmente útil para criar aplicativos que precisam recuperar recursos da web, como imagens, arquivos de texto, dados JSON/XML, etc.

Com o fphttpclient, os desenvolvedores podem escrever código para enviar solicitações HTTP, manipular cabeçalhos HTTP, processar respostas HTTP, lidar com redirecionamentos, e muito mais. Isso torna possível desenvolver uma ampla variedade de aplicativos web e clientes HTTP em Lazarus/Free Pascal.

 

Agora vamos os códigos!

 

Exemplo em Lazarus 3.0

{

Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br     

}
program Hello;
var
  HttpClient: TFPHttpClient;
  ImageStream: TMemoryStream;
begin
  HttpClient := TFPHttpClient.Create(nil);
  ImageStream := TMemoryStream.Create;
  try
    try
      // Baixa a imagem da URL
      HttpClient.Get('https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', ImageStream);

      // Se a resposta for bem-sucedida, carrega a imagem no TImage
      if HttpClient.ResponseStatusCode = 200 then
      begin
        ImageStream.Position := 0;
        Image1.Picture.LoadFromStream(ImageStream);
      end
      else
        ShowMessage('Erro ao baixar a imagem: ' + IntToStr(HttpClient.ResponseStatusCode));
    except
      on E: Exception do
        ShowMessage('Erro ao baixar a imagem: ' + E.Message);
    end;
  finally
    HttpClient.Free;
    ImageStream.Free;
  end;
end.

Este exemplo usa TFPHttpClient do pacote fphttpclient para baixar a imagem da web. Se a solicitação for bem-sucedida (código de status HTTP 200), a imagem é carregada no componente TImage. Certifique-se de ter o pacote fphttpclient instalado em seu ambiente Lazarus.

 

Could not initialize OpenSSL library

Se você estiver enfrentando o erro “Could not initialize OpenSSL library”, isso ocorre porque o TFPHttpClient requer a biblioteca OpenSSL para realizar solicitações HTTPS. Você precisa garantir que o OpenSSL esteja corretamente configurado em seu sistema.

Isso geralmente é resolvido adicionando as dlls da OpenSSL na pasta do seu executável. Lembre-se de colocar as dlls correspondentes, ou seja x32 para programas x32 e x64 para programas x64.

Quem utiliza o ACBr, dentro da pasta dos fontes ..\ACBr\trunk2\DLLs\OpenSSL

 

Vídeo de demostração de aplicação

 

Também vou deixar o link do repositório do exemplo no github.
https://github.com/giovani7cruz/SalvarImgHttp

 

Beleza pessoal? Espero que possa ajudar.

 

Dúvidas ou sugestões? Deixe o seu comentário!

 

Um abraço e até o próximo post. Valeu!

 

#LazarusProgramming

#HTTPClient

#WebImageFetching

#GiovaniDaCruz

2 comentários

  1. OLá,

    Como consigo fazer o acesso a imagens de câmera via CGI com autenticação Digest?

    O Seu exemplo só funciona quando a câmera não exige atenticação

    Obrigado.

    Silvio

    1. Olá, Silvio — obrigado pelo comentário!
      Câmeras com Digest exigem um fluxo de challenge–response: primeiro você recebe um 401 com WWW-Authenticate (realm, nonce, qop…), calcula um hash MD5 e então envia o cabeçalho Authorization: Digest …. O exemplo do post funciona para acesso sem autenticação, mas para câmeras com Digest você pode usar a biblioteca Synapse (tem exemplos) ou implementar o fluxo manualmente com TFPHTTPClient — fazendo a requisição inicial, lendo o WWW-Authenticate e reenviando com o Authorization correto.
      Abraço!

Deixe um comentário

Seu e-mail não será publicado.