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