O que é Reqwest e para que serve?
\n\nReqwest é uma das bibliotecas mais populares e convenientes para fazer requisições HTTP na linguagem Rust. Ela fornece uma API ergonômica e de alto nível, construída sobre o motor HTTP assíncrono hyper e tokio. Se você está escrevendo em Rust um web scraper, um cliente para API REST, um bot para Telegram ou simplesmente quer baixar um arquivo — Reqwest será sua ferramenta principal.
A biblioteca suporta tanto requisições assíncronas (padrão) quanto síncronas (bloqueantes), trabalho com JSON, multipart/form-data, cookies, proxy, TLS/SSL, redirecionamentos e muito mais. Reqwest foi projetado para ser intuitivo para desenvolvedores familiarizados com a biblioteca Python requests ou a biblioteca JavaScript fetch.
Principais recursos:
\n- \n
- Requisições HTTP/HTTPS assíncronas e síncronas (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS) \n
- Serialização e desserialização automática de JSON (via
serde) \n - Suporte a multipart/form-data para upload de arquivos \n
- Gerenciamento de cookies (Cookie Store) \n
- Suporte a proxy (HTTP, HTTPS, SOCKS5) \n
- Personalização de timeouts, cabeçalhos, User-Agent \n
- Trabalho com streams para respostas grandes \n
- Segurança por padrão (verificação de certificados SSL) \n
Instalação
\n\nPara usar Reqwest, você precisará de um projeto Rust com Cargo.toml. Adicione a dependência na seção [dependencies]:
[dependencies]\nreqwest = { version = "0.12", features = ["json", "multipart", "cookies", "socks"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\n\nExplicação sobre features:
\n- \n
json— inclui suporte para serialização/desserialização JSON via serde. \n multipart— para envio de multipart/form-data. \n cookies— para gerenciamento automático de cookies. \n socks— para suporte a proxy SOCKS5. \n - Se você precisar apenas do cliente síncrono (bloqueante), adicione a feature
blocking. \n
Para uso síncrono (sem assincronia), você pode configurar assim:
\n\nreqwest = { version = "0.12", features = ["blocking", "json"] }\n\nInício rápido com exemplo de código
\n\nVamos fazer uma requisição GET simples a uma API pública e exibir o resultado. Crie o arquivo main.rs:
use reqwest;\nuse std::error::Error;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn Error>> {\n // Executa requisição GET\n let response = reqwest::get("https://api.github.com/repos/rust-lang/rust")\n .await?;\n\n // Verifica o status\n if response.status().is_success() {\n // Analisa o corpo da resposta como JSON (sem tipagem estrita)\n let body: serde_json::Value = response.json().await?;\n println!("Nome do repositório: {}", body["full_name"]);\n println!("Descrição: {}", body["description"].as_str().unwrap_or("Sem descrição"));\n println!("Estrelas: {}", body["stargazers_count"]);\n } else {\n eprintln!("Erro: {}", response.status());\n }\n\n Ok(())\n}\n\nExecute com o comando cargo run. Você deve ver informações sobre o repositório Rust.
Métodos e funções principais
\n\n1. reqwest::get()
\nO que faz: Executa uma requisição HTTP GET para a URL especificada. É a maneira mais simples de obter dados. Retorna Response.
Parâmetros:
\n- \n
url: impl IntoUrl— string ou URL para onde a requisição é enviada. \n
Exemplo:
\nlet resp = reqwest::get("https://httpbin.org/get"