HTTP es un método increíblemente popular para comunicarse con servidores remotos. Utilice esta excelente biblioteca de Rust para ayudar a simplificar el proceso.

Como la mayoría de los lenguajes de programación, puede usar Rust para enviar y recibir datos a través de HTTP. Cuando está creando un servicio basado en la web, a menudo necesitará integrar uno o más servicios. A menudo lo hará enviándoles solicitudes HTTP.

Rust tiene una funcionalidad integrada para operaciones HTTP. También hay muchas bibliotecas en el ecosistema Rust que lo ayudan a interactuar con HTTP y crear servicios HTTP.

Hacer solicitudes HTTP con Rust

Varias bibliotecas de Rust están disponibles para realizar solicitudes HTTP, incluida la Reqoeste, Hiper, y Navegar bibliotecas Reqwest es el más popular entre los desarrolladores de Rust.

Reqwest es una biblioteca de cliente de alto nivel que proporciona una API simple y conveniente para realizar solicitudes HTTP. Reqwest proporciona funcionalidad para enviar solicitudes y manejar respuestas y errores. Abstrae muchos detalles detrás de la realización de una solicitud HTTP y admite funciones avanzadas como solicitudes asincrónicas utilizando el

instagram viewer
tokio tiempo de ejecución También maneja la deserialización de JSON, los encabezados HTTP, los tiempos de espera de conexión y la configuración de SSL.

Encontrará la biblioteca Reqwest útil si es nuevo en Rust o no tiene experiencia con los servicios HTTP.

Para comenzar con Reqwest, agregue Reqwest y Tokio bibliotecas a las dependencias de su proyecto. Tokio es una biblioteca de ejecución asíncrona que interopera con Reqwest. Puede agregar estas dependencias a su Cargo.toml archivo después de crear un proyecto de Rust.

[dependencias]
tokio = { versión = "1.15", caracteristicas = ["lleno"] }
solicitar = { versión = "0.11", caracteristicas = ["json"] }

Una vez que haya agregado las bibliotecas Reqwest y Tokio a las dependencias de su proyecto, Cargo las instalará cuando construya su programa.

Solicitudes HTTP GET con Reqwest

Realizará solicitudes GET para recuperar datos de un servidor web. Las solicitudes GET pueden recuperar páginas HTML, datos JSON o archivos binarios como imágenes o videos.

Reqwest le permite especificar el extremo de la URL como una cadena junto con los parámetros de consulta y los encabezados de la solicitud.

Así es como puede enviar una solicitud HTTP GET a una URL:

usar solicitud:: Error;

asíncronofnobtener_solicitud() -> Resultado {
dejar respuesta = solicitudoeste:: get(" https://www.example.com").esperar?;
imprimir!("Estado: {}", respuesta.estado());

dejar cuerpo = respuesta.texto().esperar?;
imprimir!("Cuerpo:\n{}", cuerpo);

De acuerdo(())
}

#[tokio:: principal]
asíncronofnprincipal() -> Resultado {
obtener_solicitud().esperar?;
De acuerdo(())
}

Este código define una función asíncrona, obtener_solicitud, para imprimir los detalles de la respuesta de una solicitud a example.com. llama al solicitar del módulo conseguir método e imprime el código de estado de la respuesta y el cuerpo.

Aquí está el resultado de llamar al obtener_solicitud función de la principal función:

Manejo de errores HTTP con Reqwest

Deberá manejar los errores de las solicitudes HTTP cuando surjan. La biblioteca Reqwest proporciona una Error que puede usar para manejar errores. Además, los códigos de estado HTTP del servidor web pueden proporcionar información sobre el estado de la solicitud.

Así es como puede manejar los errores HTTP para sus solicitudes con Reqwest:

usar solicitud:: Error;

asíncronofnhandle_error() -> Resultado {
dejar respuesta = solicitudoeste:: get(" https://www.example.com").esperar?;

fósforo respuesta.estado().as_u16() {
200..=299 => {
dejar cuerpo = respuesta.texto().esperar?;
imprimir!("¡Éxito! Cuerpo:\n{}", cuerpo);
}
400..=599 => {
dejar estado = respuesta.estado();
dejar mensaje_error = respuesta.texto().esperar?;
imprimir!("Error {}: {}", estado, mensaje_error);
}
_ => {
imprimir!("Código de estado inesperado: {}", respuesta.estado());
}
}

De acuerdo(())
}

#[tokio:: principal]
asíncronofnprincipal() -> Resultado {
manejar_error().esperar?;
De acuerdo(())
}

El handle_error función realiza una solicitud GET para ejemplo.comy la declaración de coincidencia maneja los errores en función del código de estado de respuesta.

La función imprime un mensaje y el código de estado dependiendo de la respuesta al servidor.

Envío de solicitudes HTTP POST con Reqwest

Realizará solicitudes HTTP POST para enviar datos a un servidor. Puedes hacerlo usando el solicitud:: Cliente estructura que crea un cliente y usa el reqwest:: RequestBuilder estructura para construir la solicitud.

Así es como puede hacer una solicitud POST a Punto final de la solicitud POST de HTTPbin con Reqwest:

usar reqwest::{Cliente, Error};

asíncronofnpublícalo() -> Resultado {
dejar dirección URL = " https://httpbin.org/post";
dejar json_datos = r#"{"nombre": "John Doe", "correo electrónico": "[email protected]"}"#;

dejar cliente = reqwest:: Cliente:: nuevo();

dejar respuesta = cliente
.post (url)
.encabezamiento("Tipo de contenido", "aplicación/json")
.cuerpo (json_data.a_propiedad())
.enviar()
.esperar?;

imprimir!("Estado: {}", respuesta.estado());

dejar cuerpo_respuesta = respuesta.texto().esperar?;
imprimir!("Cuerpo de respuesta:\n{}", cuerpo_respuesta);

De acuerdo(())
}

#[tokio:: principal]
asíncronofnprincipal() -> Resultado {
publícalo().esperar?;
De acuerdo(())
}

El datos_json La variable define los datos JSON para la solicitud y la cliente la variable es una solicitud:: Cliente instancia para la solicitud POST.

El respuesta variable es el generador de solicitudes POST. El correo El método envía la solicitud POST a la URL y el encabezamiento El método establece un encabezado HTTP. El cuerpo establece el cuerpo de la solicitud y el enviar método envía la solicitud.

El publícalo La función imprime el código de estado de la respuesta y el cuerpo en la consola usando el imprimir! macro:

Manejo de encabezados y parámetros de consulta Sus solicitudes HTTP

El manejo de encabezados y parámetros de consulta es un aspecto importante al realizar solicitudes HTTP. Los encabezados contienen información adicional, como credenciales de autenticación o metadatos sobre el contenido solicitado.

Utilizará parámetros de consulta para agregar información adicional a una URL para que el servidor filtre o modifique una respuesta.

El manejo de encabezados y parámetros de consulta sigue un proceso similar al envío de solicitudes de publicación. Así es como puede manejar encabezados y parámetros de consulta en sus solicitudes HTTP con Reqwest:

usar std:: colecciones:: HashMap;
usar reqwest::{ Error, encabezado};

#[tokio:: principal]
asíncronofnprincipal() -> Resultado {
encabezados_para_solicitudes().esperar?;
De acuerdo(())
}

asíncronofnheaders_for_requests() -> Resultado {
// Configure la URL y los encabezados para la solicitud
dejar dirección URL = " https://example.com/api";
dejarmudo encabezados = encabezado:: HeaderMap:: new();
headers.insert (header:: USER_AGENT, header:: HeaderValue:: from_static("solicitar"));
headers.insert (header:: CONTENT_TYPE, header:: HeaderValue:: from_static("aplicación/json"));

// Configurar los parámetros de consulta para la solicitud
dejarmudo parámetros = HashMap:: nuevo();
params.insert("fu", "bar");
params.insert("baz", "qux");

// Hacer la solicitud
dejar respuesta = solicitud:: Cliente:: nuevo()
.get (dirección URL)
.headers (encabezados)
.query(&parámetros)
.enviar()
.esperar?;

// Manejar la respuesta
imprimir!("{:#?}", respuesta);

De acuerdo(())
}

Creará un mapa hash para los parámetros de consulta que luego pasará al consulta método. Crear una instancia de la encabezado:: Mapa de encabezado escriba para agregar encabezados.

El headers_for_requests función envía una solicitud GET a ejemplo.com con múltiples encabezados y parámetros de consulta. utiliza el encabezados y consulta métodos que toman mapas que contienen los encabezados y los parámetros de consulta, respectivamente.

Puede construir una aplicación web de pila completa en Rust con WASM

Hacer solicitudes HTTP es una habilidad útil para crear aplicaciones sofisticadas que integran la funcionalidad de otras aplicaciones.

Puede crear aplicaciones web de pila completa en Rust con bibliotecas como Percy, Yew y Sycamore que abstraen las complejidades para una excelente experiencia de desarrollo.