在Rust中,解析HTTP响应需要使用第三方库。一个流行的库是hyper
,它可以帮助你轻松地处理HTTP请求和响应。以下是一个简单的示例,展示了如何使用hyper
库解析HTTP响应:
首先,确保在你的Cargo.toml
文件中添加了hyper
和tokio
(用于异步运行时)的依赖项:
[dependencies]
hyper = "0.14"
tokio = { version = "1", features = ["full"] }
然后,你可以编写一个简单的程序来解析HTTP响应:
use hyper::{service::{make_service_fn, service_fn}, Body, Response, Server};
use std::convert::Infallible;
use std::net::SocketAddr;
async fn handle_request(_req: hyper::Request<Body>) -> Result<Response<Body>, Infallible> {
Ok(Response::new(Body::from("Hello, World!")))
}
#[tokio::main]
async fn main() {
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
let make_svc = make_service_fn(|_conn| async {
Ok::<_, Infallible>(service_fn(handle_request))
});
let server = Server::bind(&addr).serve(make_svc);
if let Err(e) = server.await {
eprintln!("Server error: {}", e);
}
}
在这个示例中,我们创建了一个简单的HTTP服务器,监听本地地址127.0.0.1:3000
。当收到请求时,服务器会返回一个包含"Hello, World!"的响应。
要解析HTTP响应,你可以使用hyper
库提供的方法。例如,你可以使用response.status()
获取响应的状态码,使用response.headers()
获取响应的头部信息,以及使用response.body()
获取响应的主体内容。以下是一个示例,展示了如何解析HTTP响应的状态码和头部信息:
use hyper::{service::{make_service_fn, service_fn}, Body, Response, Server};
use std::convert::Infallible;
use std::net::SocketAddr;
async fn handle_request(_req: hyper::Request<Body>) -> Result<Response<Body>, Infallible> {
Ok(Response::builder()
.status(200)
.header("content-type", "text/plain")
.body(Body::from("Hello, World!"))
.expect("Failed to build response"))
}
#[tokio::main]
async fn main() {
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
let make_svc = make_service_fn(|_conn| async {
Ok::<_, Infallible>(service_fn(handle_request))
});
let server = Server::bind(&addr).serve(make_svc);
if let Err(e) = server.await {
eprintln!("Server error: {}", e);
}
}
在这个示例中,我们使用Response::builder()
创建了一个新的响应构建器,并设置了状态码为200,内容类型为"text/plain"。然后,我们使用expect()
方法创建了一个包含"Hello, World!"的响应。