[重学Rust]之ureq
✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨
这里有:
- 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
- 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
- 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!
👉 点击直达→ 盹猫猫的个人小站 👈
🌟 来逛逛吧,说不定能挖到你正在找的技术宝藏哦~
目录
⭐ 前言
⭐ 环境准备
⭐ 代码步骤
📖 请求格式
📖 GET请求
📖 POST请求
总结
欢迎来到 盹猫(>^ω^<)的博客
本篇文章主要介绍了
[📚重学Rust📚之ureq]
❤博主广交技术好友,喜欢文章的可以关注一下❤
⭐ 前言
编写这个系列文章的目的是为了巩固所学的Rust知识,对Rust中庞大的依赖体系进行整理,当然,如果文章内容可以帮助到你,那当然求之不得了😁
记录ureq依赖中的使用方法.
🌹学而时习之,不亦说乎!🌹
⭐ 环境准备
除了基础的Cargo环境之外,你还需要准备以下环境,如果你没有安装Cargo环境可以通过盹猫脚本库进行Rust环境的快速搭建工作:
[package]
name = "ureq_test"
version = "0.1.0"
edition = "2024"[dependencies]
serde = "1.0.219"
serde_json = "1.0.143"
ureq = "2.9"
- serde : Rust中序列化和反序列化的基石.(序列化基础包)
- serde_json : 序列化和反序列化Json的扩展.(序列化扩展包)
- ureq : 进行http请求的依赖库,可以在Rust中快速的构建http的请求.
⭐ 代码步骤
在进行请求操作之前,考虑到数据响应的方便接收,可以先定义一个响应结构体,类似于java中的类:
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct ResData {code: i32,msg: String,data: HashMap<String, Value>,
}
在cargo中同样使用类似注解的方式来简化代码编写,Debug是方便调试输出(类似toString).
Serialize用于进行序列化,Deserialize用于反序列化.
这里并没有用到serde_json而是用到了serde内的定义,也可以知道这里只是做一个抽象定义,具体实现由serde_json提供.
📖 请求格式
在ureq中可以使用了一种类似链式进行http请求和获取响应,基本的格式类似于下面这种:
ureq::模式(地址).set(请求头).send(内容)/query(请求参数).call(无内容).
即目标地址+请求头+请求内容的顺序进行链式调用请求.
📖 GET请求
一个基本的Get请求,以百度页面为例:
use ureq;let baidu_url = "https://www.baidu.com";//使用get请求模式
let baidu_res = ureq::get(baidu_url)//设置请求头(模仿浏览器).set("user-agent","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36")// 发起请求.call().unwrap();
可以看出完全符合前面提到的请求流程格式和顺序.
返回的响应是一个ureq::Response结构体,如果只想获取响应的内容,可以直接使用其into_string()方法将响应内容转换为字符串输出.
baidu_res.into_string().unwrap()
📖 POST请求
在POST请求中比较经典的就是登录请求,这里就用登录请求作为示例:
use serde_json::{Value, json};
use ureq;
//请求地址
let url = "http://127.0.0.1:8007/login";
//请求数据
let data = json!({"username":"admin","password":"123456"});//设置POST请求模式
let response = ureq::post(url)//设置请求数据为application/json 格式.set("Content-Type", "application/json")//设置JSON请求体,并发送请求.send_string(&data.to_string()).unwrap();
这里使用到了serde_json中的Json宏函数对将用户名和密码转换为Json字符串,与GET几乎一样的配置方式,因为这里需要发送这个JSON字符串,所以使用了send_string()方法. 同样会返回Response结构体.
请求以后的JSON数据需要转换为上面定义的ResData结构体,则仍然要进行JSON的转换,转换方式如下:
//获取响应的字符串
let data = response.into_string().unwrap();
//反序列化为结构体
let resdata: ResData = serde_json::from_str(&data).unwrap();
这样后续代码就可以直接对结构体进行操作了.
其它的如delete请求,put请求与上述的写法基本没有什么差别,这边就不进行举例了.
总结
ureq是Rust中一个相当不错的HTTP请求框架,可以很方便的以链式结构的方式构建出一个HTTP请求,配合serde依赖可以实现数据的序列化和反序列化操作,赶紧去试试吧!
上面就是所有文章内容了,如果内容对你有帮助,麻烦留一个赞👍和收藏⭐支持一下!
如果你对区块链内容感兴趣可以查看我的专栏:小试牛刀-区块链
感谢您的关注和收藏!!!!!!