Rust:
Enviando uma requisição HTTP
Como fazer:
Para enviar uma requisição HTTP em Rust, você pode usar a crate reqwest, que simplifica a maioria das tarefas de networking. Primeiro, adicione a crate ao seu Cargo.toml:
[dependencies]
reqwest = "0.11"
tokio = { version = "1", features = ["full"] }E aqui está um exemplo de como você pode usar reqwest para fazer uma requisição GET:
use reqwest::Error;
#[tokio::main]
async fn main() -> Result<(), Error> {
let res = reqwest::get("http://httpbin.org/get").await?;
println!("Status: {}", res.status());
println!("Headers:\n{:#?}", res.headers());
let body = res.text().await?;
println!("Body:\n{}", body);
Ok(())
}Saída de exemplo:
Status: 200 OK
Headers:
{
"content-type": "application/json",
...
}
Body:
{
"args": {},
"headers": {
"Host": "httpbin.org",
...
},
"origin": "..."
}Mergulho Profundo:
A declaração de #[tokio::main] prepara o cenário para o uso de async-await, que é essencial em operações que podem bloquear, como solicitações de rede. Historicamente, alternativas como hyper exigiam mais configuração e detalhes da implementação, mas reqwest abstrai isso, oferecendo uma interface simples. A biblioteca passou por várias iterações e melhorias de desempenho ao longo dos anos, o que reflete a evolução do async Rust.
Falando em alternativas, além de reqwest, há outras crates que você pode explorar, como hyper (para quem precisa de controle detalhado) e surf (uma opção mais recente que só suporta async).
Quanto a implementação, é importante entender como reqwest lida com assincronia, que permite ao Rust realizar outras tarefas enquanto espera a resposta de uma requisição. Isso é feito por meio de um runtime async, geralmente fornecido pelo tokio. Sem ele, você teria de lidar com muita complexidade de baixo nível de I/O e concorrência.
Veja Também:
Para se aprofundar mais na biblioteca reqwest e suas capacidades:
- Documentação da crate
reqwest: https://docs.rs/reqwest/
Para entender os conceitos de async-await no Rust:
- Rust book sobre Concorrência Assíncrona: https://doc.rust-lang.org/book/ch16-05-async.html
Para uma visão geral do ecossistema de solicitações de rede em Rust, incluindo o hyper e surf:
- Uma comparação entre
hyper,reqwest, esurf: https://www.arewewebyet.org/topics/libraries/#http-clients