当前位置: 首页 > news >正文

[重学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依赖可以实现数据的序列化和反序列化操作,赶紧去试试吧!

上面就是所有文章内容了,如果内容对你有帮助,麻烦留一个赞👍和收藏⭐支持一下!


如果你对区块链内容感兴趣可以查看我的专栏:小试牛刀-区块链

感谢您的关注和收藏!!!!!!

http://www.dtcms.com/a/389773.html

相关文章:

  • 水下机器人专用绝缘监测装置
  • C++中std::map容器中元素删除方法汇总
  • JavaEE 初阶第二十三期:网络原理,底层框架的“通关密码”(三)
  • 打工人日报#20250918
  • Git本地\远程分支区分查找
  • 从零开始手写机器学习框架:我的深度学习之旅——开启深度学习的底层探索
  • QT的部件
  • Ubuntu20.04仿真 | iris四旋翼添加双目相机D435i
  • eSIM时代来临!iPhone Air引爆无卡化革命
  • openkylin、ubuntu22部署opencv4.8.0
  • 各省产业结构合理化-摩尔(Moore)指数 1999-2023年
  • 【win10、win11】永久关闭自动更新
  • Linux基础实践(基于Ubuntu系统)
  • 线性控制理论:线性系统状态空间
  • OpenAI最新研究:为什么语言模型会产生幻觉
  • 人工智能通识与实践 - 自然语言处理
  • Coze源码分析-资源库-创建工作流-后端源码-安全/错误/流程
  • OneTerm开源堡垒机实战(四):访问授权与安全管控
  • 【赵渝强老师】基于PostgreSQL的MPP集群:Greenplum
  • leetCode算法题记录:27.移除元素
  • 自动化运维工具ansible
  • Roo Code 设置导入、导出与重置
  • 视觉检测技术讲解
  • LibreCAD-2.2+QT5.12+RTKLIB2.4.3
  • Pydantic Schemas 及其在 FastAPI 中的作用
  • SMS05 TVS二极管阵列的ESD和闭锁保护SOT23-6封装
  • Stream的常用API应用场景
  • 【DMA】DMA实战:用DMA操控外设
  • 深入理解传输层协议:UDP 与 TCP 的核心原理与应用
  • 教育行业数字化资料管理:构建安全合规、高效协同的一体化知识共享平台