在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) -> Result, 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) -> Result, 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!"的响应。