Reqwest para Rust: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Reqwest y para qué sirve?

\n\n

Reqwest es una de las bibliotecas más populares y convenientes para realizar solicitudes HTTP en el lenguaje Rust. Proporciona una API ergonómica y de alto nivel, construida sobre el motor HTTP asíncrono hyper y tokio. Si estás escribiendo en Rust un web scraper, un cliente para API REST, un bot para Telegram o simplemente quieres descargar un archivo, Reqwest será tu herramienta principal.

\n\n

La biblioteca admite tanto solicitudes asíncronas (por defecto) como síncronas (bloqueantes), trabajo con JSON, multipart/form-data, cookies, proxies, TLS/SSL, redirecciones y mucho más. Reqwest está diseñado para ser intuitivo para desarrolladores familiarizados con la biblioteca de Python requests o la biblioteca de JavaScript fetch.

\n\n

Características clave:

\n
    \n
  • Solicitudes HTTP/HTTPS asíncronas y síncronas (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS)
  • \n
  • Serialización y deserialización automática de JSON (a través de serde)
  • \n
  • Soporte para multipart/form-data para carga de archivos
  • \n
  • Gestión de cookies (Cookie Store)
  • \n
  • Soporte para proxies (HTTP, HTTPS, SOCKS5)
  • \n
  • Personalización de tiempos de espera, encabezados, User-Agent
  • \n
  • Trabajo con flujos (streaming) para respuestas grandes
  • \n
  • Seguridad por defecto (verificación de certificados SSL)
  • \n
\n\n

Instalación

\n\n

Para usar Reqwest necesitarás un proyecto en Rust con Cargo.toml. Agrega la dependencia en la sección [dependencies]:

\n\n
[dependencies]\nreqwest = { version = "0.12", features = ["json", "multipart", "cookies", "socks"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"
\n\n

Explicación de las features:

\n
    \n
  • json — incluye soporte para serialización/deserialización de JSON a través de serde.
  • \n
  • multipart — para enviar multipart/form-data.
  • \n
  • cookies — para gestión automática de cookies.
  • \n
  • socks — para soporte de proxy SOCKS5.
  • \n
  • Si solo necesitas el cliente síncrono (bloqueante), agrega la feature blocking.
  • \n
\n\n

Para uso síncrono (sin asincronía) puedes configurarlo así:

\n\n
reqwest = { version = "0.12", features = ["blocking", "json"] }
\n\n

Inicio rápido con ejemplo de código

\n\n

Hagamos una solicitud GET simple a una API pública y mostremos el resultado. Crea el archivo main.rs:

\n\n
use reqwest;\nuse std::error::Error;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn Error>> {\n    // Realizamos una solicitud GET\n    let response = reqwest::get("https://api.github.com/repos/rust-lang/rust")\n        .await?;\n\n    // Verificamos el estado\n    if response.status().is_success() {\n        // Parseamos el cuerpo de la respuesta como JSON (sin tipado estricto)\n        let body: serde_json::Value = response.json().await?;\n        println!("Nombre del repositorio: {}", body["full_name"]);\n        println!("Descripción: {}", body["description"].as_str().unwrap_or("Sin descripción"));\n        println!("Estrellas: {}", body["stargazers_count"]);\n    } else {\n        eprintln!("Error: {}", response.status());\n    }\n\n    Ok(())\n}
\n\n

Ejecuta con el comando cargo run. Deberías ver información sobre el repositorio de Rust.

\n\n

Métodos y funciones principales

\n\n

1. reqwest::get()

\n

Qué hace: Realiza una solicitud HTTP GET a la URL especificada. Es la forma más sencilla de obtener datos. Devuelve Response.

\n

Parámetros:

\n
    \n
  • url: impl IntoUrl — cadena o URL a la que se envía la solicitud.
  • \n
\n

Ejemplo:

\n
let resp = reqwest::get("https://httpbin.org/get"                    

Recommendations