vb语言http post请求_Reqwest - 易用强大的Rust语言HTTP请求库

论坛 期权论坛 脚本     
已经匿名di用户   2022-4-13 16:44   2312   0

想要用 Rust 语言进行 HTTP 请求,只用标准库可不太容易。Reqwest,这个提供了方便易用的 HTTP 客户端的 Rust 库,值得一看。

73a05f288aa8e51bdbddabfdcb30a75d.png

Rust语言

简介

Reqwest,是 seanmonstar 在 Github 上开源的 Rust 语言的 HTTP 客户端库,代码仓库在 https://github.com/seanmonstar/reqwest,目前版本为 0.10.6。Reqwest 简单易用,功能强大,包括异步和阻塞模式,可以处理各种类型的请求数据,支持 HTTP 代理、TLS 加密、Cookie 存储等功能,另外还包括了对 WASM 的支持。

eb92b4922219b4526547874d3cddaa19.png

HTTP请求

安装

使用 Cargo 安装,在项目的 Cargo.toml 中添加依赖:

[dependencies]reqwest = { version = "0.10", features = ["json"] }

Reqwest 有包括 tls、blocking、gzip、json、socks 等的特性,可进行 features 的自定义配置。

在异步模式下,还需要 Tokio 运行时:

tokio = { version = "0.2", features = ["full"] }

示例

Reqwest 可以方便的发起GET请求,直接使用 get 函数即可:

extern crate reqwest;#[tokio::main]async fn main() -> Result {    let res = reqwest::get("https://www.rust-lang.org").await?;    println!("Status: {}", res.status());    let body = res.text().await?;    println!("Body:{}", body);    Ok(())}

另外,也可以使用阻塞模式进行,此时需要使用 blocking 模块:

extern crate reqwest;fn main() -> Result> {    env_logger::init();    println!("GET https://www.rust-lang.org");    let mut res = reqwest::blocking::get("https://www.rust-lang.org/")?;    println!("Status: {}", res.status());    println!("Headers:{:?}", res.headers());    res.copy_to(&mut std::io::stdout())?;    println!("Done.");    Ok(())}

想要进行更加复杂的请求,可以进行 Reqwest 的 Client 的实例化,并使用该客户端进行请求:

let client = reqwest::Client::new();let res = client.post("http://httpbin.org/post")    .body("the exact body that is sent")    .send()    .await?;

进行 JSON 相关的请求也是十分简单的,把发送文本的 body 改为 json 即可:

let mut map = HashMap::new();map.insert("lang", "rust");map.insert("body", "json");let client = reqwest::Client::new();let res = client.post("http://httpbin.org/post")    .json(&map)    .send()    .await?;

Reqwest 默认使用环境变量中的代理设定,支持包括 SOCKS 协议在内的 HTTP 代理,也可以使用 builder 来使用代理:

let proxy = reqwest::Proxy::all("socks5://127.0.0.1:9050").expect("tor proxy should be there");let client = reqwest::Client::builder()    .proxy(proxy)    .build()    .expect("should be able to build reqwest client");

另外,Reqwest 还支持在 WASM 中使用,可以在 Rust 中实现 HTTP 请求,并通过 WASM 在前端 JS 中调用。

use wasm_bindgen::prelude::*;#[wasm_bindgen]pub async fn run() -> Result {    let res = reqwest::Client::new()        .post("https://postman-echo.com/post")        .body("This is expected to be sent back as part of response body.")        .header("Content-Type", "application/x-www-form-urlencoded")        // .header("Access-Control-Allow-Origin", "*")        .send()        .await?;    let text = res.text().await?;    Ok(JsValue::from_str(&text))}
ddf0ba18e3351faec4f7b5996b20e542.png

Rust Reqwest

总结

Reqwest 接口设计简洁,使用方便,易于使用;且功能丰富,可以应对大多数场景的应用,是 Rust 语言在 HTTP 请求时的优秀选择。

Reqwest 代码结构清晰,注释明了,示例丰富,遵循模块化思想,是进行 Rust 库学习的优秀例子。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP