Introdução ao Typhoeus
Typhoeus é uma biblioteca Ruby para requisições HTTP baseada no libcurl, projetada para oferecer desempenho superior e funcionalidades avançadas, como processamento paralelo e upload de arquivos. Esta ferramenta é ideal para desenvolvedores que buscam eficiência em aplicações que lidam com múltiplas requisições de rede.
Instalação Rápida
Para adicionar o Typhoeus ao seu projeto, utilize o gerenciador de pacotes Ruby. Execute o seguinte comando no terminal:
gem install typhoeus
Alternativamente, insira a linha abaixo no seu arquivo Gemfile:
gem 'typhoeus', '~> 1.4'
Uso Básico para Requisições HTTP
Inicie com uma requisição simples para entender a API do Typhoeus. Aqui, fazemos uma solicitação GET a um endpoint de exemplo:
resposta_http = Typhoeus::Request.execute(
url: "http://api.dados.org/recursos",
method: :get,
params: { chave: "valor" },
timeout: 10
)
puts resposta_http.code # Exibe o código de status HTTP
puts resposta_http.body # Exibe o corpo da resposta
Processamento Paralelo com Hydra
Para otimizar o tempo de execução ao enviar múltiplas requisições, empregue o gerenciador Hydra. Ele permite enfileirar e executar requisições simultaneamente:
gerenciador = Typhoeus::Hydra.hydra
solicitacoes = []
1..8.times do |i|
req = Typhoeus::Request.new("http://exemplo.com/recurso/#{i}")
gerenciador.queue(req)
solicitacoes << req
end
gerenciador.run
solicitacoes.each do |sol|
puts "Status da requisição #{sol.url}: #{sol.response.code}"
end
Funcionalidades Avançadas
Sistema de Cache
Typhoeus integra um mecanismo de cache para armazenar respostas e reduzir chamadas de rede. Configure um cache personalizado implementando a interface de cache:
class MeuCache
def get(request_hash)
# Lógica para recuperar do cache
end
def set(request_hash, response)
# Lógica para salvar no cache
end
end
Typhoeus::Config.cache = MeuCache.new
Tratamento de Erros
Implemente callbacks para gerenciar falhas de rede de forma elegante:
sol_req = Typhoeus::Request.new("http://site.invalido")
sol_req.on_complete do |resposta|
case true
when resposta.success?
puts "Sucesso: Dados recebidos."
when resposta.timed_out?
puts "Erro: Tempo limite excedido."
when resposta.code == 0
puts "Erro: Falha na conexão."
else
puts "Erro HTTP: #{resposta.code}"
end
end
sol_req.run
Otimização de Desempenho
Ajuste parâmetros chave para melhorar a eficiência:
- Defina a concorrência máxima com
max_concurrencyno Hydra para controlar paralelismo. - Habilite cache para requisições repetitivas a fim de diminuir a latência.
- Configure timeouts adequados (por exemplo,
timeout: 5) para evitar bloqueios longos.
Casos de Uso Comuns
Typhoeus é particularmente útil em cenários como:
- Web Scraping: Acelere a coleta de dados de múltiplas páginas usando requisições paralelas.
- Integrações com APIs: Integre-se a serviços externos com alta taxa de requisições.
- Upload de Arquivos: Transfira arquivos grandes de forma eficiente com suporte nativo.
Perguntas Frequentes
Como verificra a versão do Typhoeus instalada?
Execute puts Typhoeus::VERSION em um script Ruby.
É possível desativar a verificação SSL?
Sim, adicione ssl_verifypeer: false nas opções da requisição, mas somente em ambientes controlados.