gpt4 book ai didi

http - 如何从 Rust 发出 HTTP 请求?

转载 作者:可可西里 更新时间:2023-11-01 15:03:52 26 4
gpt4 key购买 nike

如何从 Rust 发出 HTTP 请求?我似乎在核心库中找不到任何东西。

我不需要解析输出,只需发出请求并检查 HTTP 响应代码即可。

如果有人能告诉我如何对我的 URL 上的查询参数进行 URL 编码,将加分!

最佳答案

在 Rust 中发出 HTTP 请求的最简单方法是使用 reqwest crate :

use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
let resp = reqwest::blocking::get("https://httpbin.org/ip")?.text()?;
println!("{:#?}", resp);
Ok(())
}

Cargo.toml 中:

[dependencies]
reqwest = { version = "0.11", features = ["blocking"] }

异步

Reqwest 还支持使用 Tokio 发出异步 HTTP 请求:

use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let resp = reqwest::get("https://httpbin.org/ip")
.await?
.text()
.await?;
println!("{:#?}", resp);
Ok(())
}

Cargo.toml 中:

[dependencies]
reqwest = "0.11"
tokio = { version = "1", features = ["full"] }

super

Reqwest 是一个易于使用的包装器 Hyper ,这是一个流行的 Rust HTTP 库。如果您需要更多地控制连接管理,您可以直接使用它。 Hyper基于 -based 的示例如下,主要受 an example in its documentation 启发。 :

use hyper::{body::HttpBody as _, Client, Uri};
use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let client = Client::new();

let res = client
.get(Uri::from_static("http://httpbin.org/ip"))
.await?;

println!("status: {}", res.status());

let buf = hyper::body::to_bytes(res).await?;

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

Cargo.toml 中:

[dependencies]
hyper = { version = "0.14", features = ["full"] }
tokio = { version = "1", features = ["full"] }

原始答案(Rust 0.6)

我相信您正在寻找的是 standard library .现在在 rust-http在可预见的 future ,Chris Morgan 的回答是当前 Rust 的标准方式。我不确定我能带你走多远(希望我没有带错方向!),但你会想要这样的东西:

// Rust 0.6 -- old code
extern mod std;

use std::net_ip;
use std::uv;

fn main() {
let iotask = uv::global_loop::get();
let result = net_ip::get_addr("www.duckduckgo.com", &iotask);

io::println(fmt!("%?", result));
}

关于编码,在src/libstd/net_url.rs中的单元测试中有一些例子。

关于http - 如何从 Rust 发出 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14154753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com