Reqwest for Rust:完整指南与示例

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

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

开始课程

什么是 Reqwest,为什么需要它?



Reqwest 是 Rust 语言中最流行且最方便的 HTTP 请求库之一。它提供了一个基于异步 HTTP 引擎 hyper 和 tokio 构建的、符合人体工程学的高级 API。如果您正在用 Rust 编写网络爬虫、REST API 客户端、Telegram 机器人,或者只是想下载文件,Reqwest 将成为您的主要工具。



该库既支持异步(默认)请求,也支持同步(阻塞)请求,并支持 JSON、multipart/form-data、Cookie、代理、TLS/SSL、重定向等众多功能。Reqwest 的设计目标是让熟悉 Python 库 requests 或 JavaScript 库 fetch 的开发者能够直观理解。



主要功能:

  • 异步和同步 HTTP/HTTPS 请求(GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS)
  • 自动 JSON 序列化和反序列化(通过 serde)
  • 支持 multipart/form-data 文件上传
  • Cookie 管理(Cookie Store)
  • 支持代理(HTTP、HTTPS、SOCKS5)
  • 自定义超时、请求头、User-Agent
  • 支持大响应的流式处理
  • 默认安全(SSL 证书验证)


安装



要使用 Reqwest,您需要一个带有 Cargo.toml 的 Rust 项目。在 [dependencies] 部分添加依赖:



[dependencies]reqwest = { version = "0.12", features = ["json", "multipart", "cookies", "socks"] }tokio = { version = "1", features = ["full"] }serde = { version = "1", features = ["derive"] }serde_json = "1"


features 说明:

  • json — 启用通过 serde 进行 JSON 序列化/反序列化支持。
  • multipart — 用于发送 multipart/form-data。
  • cookies — 用于自动 Cookie 管理。
  • socks — 用于支持 SOCKS5 代理。
  • 如果您只需要同步(阻塞)客户端,请添加 blocking 功能。


对于同步使用(无需异步),可以这样配置:



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


快速入门与代码示例



让我们向公共 API 发送一个简单的 GET 请求并输出结果。创建文件 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?;

// 检查状态 if response.status().is_success() { // 将响应体解析为 JSON(无严格类型) let body: serde_json::Value = response.json().await?; println!("仓库名称:{}", body["full_name"]); println!("描述:{}", body["description"].as_str().unwrap_or("无描述")); println!("星标数:{}", body["stargazers_count"]); } else { eprintln!("错误:{}", response.status()); }

Ok(())}


使用命令 cargo run 运行。您应该会看到 Rust 仓库的信息。



主要方法和函数



1. reqwest::get()

功能: 向指定 URL 执行 HTTP GET 请求。这是获取数据的最简单方式。返回 Response。

参数:

  • url: impl IntoUrl — 发送请求的字符串或 URL。

示例:

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

推荐