Cliente HTTP para Rust: principais bibliotecas para trabalhar com requisições

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cliente HTTP para Rust: visão geral das melhores bibliotecas



Rust é uma linguagem de programação de sistemas que ganhou popularidade devido à segurança, desempenho e ausência de coletor de lixo. Ao desenvolver aplicações web, microsserviços ou ferramentas para trabalhar com APIs, surge frequentemente a necessidade de enviar requisições HTTP. Neste artigo, vamos analisar as melhores bibliotecas para trabalhar com HTTP em Rust, suas características, desempenho e exemplos de uso.



1. reqwest — o cliente HTTP mais popular



reqwest é um cliente HTTP de alto nível e conveniente para Rust, construído sobre hyper. Ele suporta requisições síncronas e assíncronas, processamento automático de JSON, cookies, proxy e TLS.



Principais funcionalidades:

  • Suporte a async/await (requer tokio ou async-std)
  • Serialização/desserialização automática de JSON (via serde)
  • Trabalho com formulários, multipart, arquivos
  • Gerenciamento de cookies e sessões
  • Suporte a HTTP/2 e TLS (via native-tls ou rustls)


Exemplo de requisição GET com reqwest:

use reqwest;

#[tokio::main]async fn main() -> Result<(), reqwest::Error> { let response = reqwest::get("https://api.github.com/repos/rust-lang/rust") .await?;

let body = response.text().await?; println!("Resposta: {}", body); Ok(())}


Exemplo de requisição POST com JSON:

use reqwest;use serde_json::json;

#[tokio::main]async fn main() -> Result<(), reqwest::Error> { let client = reqwest::Client::new(); let payload = json!({"title": "Nova tarefa", "completed": false});

let response = client .post("https://jsonplaceholder.typicode.com/todos") .json(&payload) .send() .await?;

println!("Status: {}", response.status()); Ok(())}


2. ureq — minimalista e rápido



ureq é um cliente HTTP síncrono leve, sem dependências de runtime assíncrono. É ideal para scripts, utilitários CLI e projetos onde a assincronicidade não é necessária.



Características:

  • API puramente síncrona
  • Número mínimo de dependências
  • Suporte a JSON, multipart, cookies
  • Suporte embutido a TLS (via native-tls ou rustls)


Exemplo com ureq:

use ureq;

fn main() -> Result<(), ureq::Error> { let response = ureq::get("https://httpbin.org/get") .set("Accept", "application/json") .call()?;

let body: serde_json::Value = response.into_json()?; println!("JSON: {}", body); Ok(())}


3. hyper — fundamento de baixo nível



hyper é uma biblioteca HTTP assíncrona sobre a qual muitos outros clientes são construídos (incluindo reqwest). Ela oferece controle total sobre as requisições, mas requer mais código e compreensão de conceitos assíncronos.



Quando escolher hyper:

  • Quando for necessário o máximo desempenho
  • Quando for necessário ajuste fino das conexões
  • Quando você estiver construindo seu próprio servidor HTTP ou proxy


Exemplo de requisição GET simples com hyper:

use hyper::{Client, Uri};use hyper::body::HttpBody;

#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = Client::new(); let uri: Uri = "http://httpbin.org/ip".parse()?; let mut response = client.get(uri).await?;

while let Some(chunk) = response.body_mut().data().await { let data = chunk?; println!("{}", String::from_utf8_lossy(&data)); } Ok(())}


4. actix-web-client — para o ecossistema Actix



actix-web-client é um

Recommendations