📅  最后修改于: 2023-12-03 14:52:34.188000             🧑  作者: Mango
在 Rust 中发出 HTTP 请求是一项常见任务,本文将介绍在 Rust 中发出 HTTP 请求的方法。
Rust 标准库提供一个 std::net::TcpStream
类型,可用于建立 TCP 连接并发送 HTTP 请求。以下是示例代码:
use std::io::prelude::*;
use std::net::TcpStream;
fn main() -> std::io::Result<()> {
let mut stream = TcpStream::connect("example.com:80")?;
stream.write_all(b"GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n")?;
let mut buffer = String::new();
stream.read_to_string(&mut buffer)?;
println!("{}", buffer);
Ok(())
}
此代码建立一个 TCP 连接到 example.com
的 HTTP 端口,发送 HTTP GET 请求,读取响应并输出到标准输出。
许多 Rust crate 提供了更高级别的接口,更容易使用,这里介绍两种较常用的 crate。
reqwest
crate 提供一个简单易用的接口发出 HTTP 请求。
要使用此库,需要将以下行添加到您的 Cargo.toml
文件中:
[dependencies]
reqwest = { version = "0.11.3", features = ["json"] }
以下是代码示例:
use reqwest::Error;
#[tokio::main]
async fn main() -> Result<(), Error> {
let resp = reqwest::get("https://example.com").await?;
println!("Status: {}", resp.status());
println!("Headers:\n{:?}", resp.headers());
println!("Body:\n{}", resp.text().await?);
Ok(())
}
此代码使用 reqwest::get
函数发送 HTTP GET 请求到 example.com
,读取响应并输出一些信息。
此库还提供其他方便的功能,例如自动跟随重定向、JSON 解析等。
hyper
crate 提供了 Rust 中的低级别 HTTP 客户端和服务器端的实现。
要使用此库,将以下行添加到您的 Cargo.toml
文件中:
[dependencies]
hyper = "0.14.10"
以下是代码示例:
use std::io::Result;
use hyper::{Client, Uri};
#[tokio::main]
async fn main() -> Result<()> {
let client = Client::new();
let uri = "https://example.com".parse::<Uri>().unwrap();
let resp = client.get(uri.clone()).await?;
println!("Status: {}", resp.status());
println!("Headers:\n{}", resp.headers());
let body = hyper::body::to_bytes(resp.into_body()).await?;
println!("Body:\n{}", String::from_utf8_lossy(&body));
Ok(())
}
此代码使用 hyper::Client
发出 HTTP GET 请求到 example.com
,读取响应并输出一些信息。
hyper
crate 是底层接口,需要进行更多的配置和实现。但是,如果需要更多的灵活性,它可能是更好的选择。
在 Rust 中发出 HTTP 请求可以使用原生 Rust,也可以使用第三方 crate,如 reqwest
和 hyper
。它们都提供了不同程度的灵活性和易用性。