Rust reqwest 简明教程

概述

reqwest 是 Rust 中一个非常流行和强大的 HTTP 客户端库,它提供了一种简单的方式来发送 HTTP 请求并处理响应。reqwest 支持阻塞和非阻塞(异步)请求,使其适合于各种不同的应用场景。在这篇博文中,我们将详细介绍如何使用 reqwest 发送各种 HTTP 请求,并处理返回的响应。

开始之前

在开始编写代码之前,你需要在你的 Rust 项目中添加 reqwest 依赖。打开你的 Cargo.toml 文件,并添加以下内容:

toml 复制代码
[dependencies]
reqwest = { version = "0.12.4", features = ["json"] }
tokio = { version = "1", features = ["full"] }
serde = { version = "1.0.197", features = ["derive"] }
serde_json = "1.0.114"

这里我们还添加了其他几个依赖:

  • tokio: 在后面的示例中,我们将使用 reqwest 的异步功能。
  • serde: 用于数据解析,在示例中,我们会演示 json 数据的解析。
  • serde_json: 便于使用 json! 宏快速构建 json 数据。

发送 GET 请求

发送一个 GET 请求是最基本的 HTTP 操作。以下是如何使用 reqwest 发送 GET 请求并设置请求头的示例:

rust 复制代码
use reqwest::header;

#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
    let params = [("key1", "value1"), ("key2", "values")];
    let client = reqwest::Client::new();
    let body = client
        .get("http://httpbin.org/get")
        // set query params
        .form(&params)
        // set request headers
        .header(header::USER_AGENT, "My Rust Program")
        .header(header::CONTENT_TYPE, "application/json")
        .send()
        .await?
        .text()
        .await?;
    println!("body = {:?}", body);
    Ok(())
}

在这个例子中,我们使用 reqwest::get 函数发送一个 GET 请求到 "https://httpbin.org/get",并通过 text 方法获取响应的文本内容。

发送 POST - text 请求

rust 复制代码
use reqwest::Client;

#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
    let client = Client::new();
    let res = client.post("http://httpbin.org/post")
        .body("the exact body that is sent")
        .send()
        .await?
        .text()
        .await?;

    println!("body: {:?}", res);
    Ok(())
}

发送 POST - form 请求

rust 复制代码
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
    let params = [("key1", "value1"), ("key2", "values")];
    let client = reqwest::Client::new();
    let res = client.post("http://httpbin.org/post")
        .form(&params)
        .send()
        .await?
        .text()
        .await?;

    println!("body: {:?}", res);
    Ok(())
}

发送 POST - json 请求

发送 POST 请求通常用于向服务器提交数据。以下是如何使用 reqwest 发送包含 JSON 数据的 POST 请求的示例:

rust 复制代码
use reqwest;
use serde_json::json;

#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
    let client = reqwest::Client::new();
    let res = client.post("https://httpbin.org/post")
        .json(&json!({"key": "value"}))
        .send()
        .await?;

    let body = res.text().await?;
    println!("Body:\n{}", body);

    Ok(())
}

这里我们使用 Client::post 方法创建一个 POST 请求,并通过 json 方法设置 JSON 负载。然后,我们调用 send 方法发送请求。

处理 JSON 响应

rust 复制代码
use reqwest;
use serde::Deserialize;

#[derive(Deserialize)]
struct Ip {
    origin: String,
}

#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
    let ip: Ip = reqwest::get("https://httpbin.org/ip")
        .await?
        .json()
        .await?;

    println!("IP: {}", ip.origin);
    Ok(())
}

在这个示例中,我们定义了一个 Ip 结构体来表示 JSON 响应,然后使用 json 方法将响应反序列化为 Ip 类型。

总结

reqwest 库为 Rust 提供了一个功能丰富而灵活的 HTTP 客户端,适用于各种网络编程任务。无论是简单的数据获取还是复杂的 API 交互,reqwest 都能帮助你以简洁的 Rust 代码完成任务。希望这篇博文能帮助你开始使用 reqwest 来开发网络相关的 Rust 应用!

相关推荐
丁卯4044 分钟前
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
服务器·后端·golang
chengooooooo5 分钟前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
人间打气筒(Ada)2 小时前
MySQL主从架构
服务器·数据库·mysql
落笔画忧愁e3 小时前
FastGPT快速将消息发送至飞书
服务器·数据库·飞书
小冷爱学习!3 小时前
华为动态路由-OSPF-完全末梢区域
服务器·网络·华为
落幕4 小时前
C语言-进程
linux·运维·服务器
bing_1584 小时前
简单工厂模式 (Simple Factory Pattern) 在Spring Boot 中的应用
spring boot·后端·简单工厂模式
天上掉下来个程小白4 小时前
案例-14.文件上传-简介
数据库·spring boot·后端·mybatis·状态模式
Asthenia04125 小时前
基于Jackson注解的JSON工具封装与Redis集成实战
后端
编程星空5 小时前
css主题色修改后会多出一个css吗?css怎么定义变量?
开发语言·后端·rust