Rust HTTP客户端:正确发送请求

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Rust中的HTTP客户端:正确发起请求



Rust是一种现代系统编程语言,兼具C++的性能和内存安全性。在开发Web应用、微服务或命令行工具时,经常需要与外部API交互。本文将介绍如何使用流行的crate reqwest 和 ureq 在Rust中创建HTTP客户端。您将学习如何发送GET和POST请求、处理错误以及处理JSON数据。



为什么用Rust处理HTTP请求?



Rust为网络操作提供了独特优势:



  • 内存安全 — 编译器保证无内存泄漏和数据竞争。
  • 高性能 — 速度媲美C/C++。
  • 异步支持 — 内建async/await支持,实现高效I/O操作。
  • Crate生态系统 — 数千个现成库,包括HTTP客户端。


在Rust中处理HTTP主要有两种方式:同步(阻塞)和异步(非阻塞)。我们将逐一介绍。



项目设置与crate选择



创建一个新的Rust项目:



cargo new rust-http-clientcd rust-http-client


打开 Cargo.toml 并添加依赖:



[dependencies]# 用于异步请求reqwest = { version = "0.12", features = ["json"] }tokio = { version = "1", features = ["full"] }

# 用于同步请求(替代方案)ureq = "2.9"


Crate对比:



  • reqwest — 最流行的HTTP客户端。支持异步、JSON、Cookie、代理。
  • ureq — 轻量级同步客户端。适合简单脚本和CLI工具。


1. 使用reqwest发送GET请求(异步)



先从一个异步GET请求开始。创建文件 src/main.rs:



use reqwest;use std::error::Error;

#[tokio::main]async fn main() -> Result<(), Box<dyn Error>> { // 发送GET请求 let response = reqwest::get("https://api.github.com/repos/rust-lang/rust") .await? .text() .await?;

println!("GitHub API响应:"); println!("{}", &response[..500]); // 打印前500个字符

Ok(())}


说明:



  • #[tokio::main] — 用于启动Tokio异步运行时的宏。
  • reqwest::get() — 发送GET请求并返回 Response。
  • .await? — 等待操作完成并处理错误。
  • .text() — 提取响应体为字符串。


运行项目:



cargo run


您将看到来自GitHub API的JSON响应。



2. 使用reqwest发送带JSON的POST请求



现在发送一个带JSON体的POST请求:



use reqwest;use serde::{Deserialize, Serialize};use std::error::Error;

#[derive(Serialize, Deserialize, Debug)]struct Post { title: String, body: String, user_id: u32,}

#[derive(Deserialize, Debug)]struct CreatedPost { id: u32, title: String,}

#[tokio::main]async fn main() -> Result<(), Box<dyn Error>> { // 创建带设置的客户端 let client = reqwest::Client::new();

// 要发送的数据 let new_post = Post { title: "Rust中的HTTP客户端".to_string(), body: "在Rust中处理HTTP的完整指南".to_string(), user_id: 1, };

// 发送POST请求 let response = client .post("https://jsonplaceholder.typicode.com/posts") .json(&new_post) .send() .await?;

//

博客

书籍推荐