4 个版本
| 0.7.1 | 2024年2月3日 |
|---|---|
| 0.7.0 | 2024年1月20日 |
| 0.6.2 | 2024年1月20日 |
| 0.6.1 | 2024年1月20日 |
#1225 in 网络编程
每月25次下载
25KB
393 行
rust-cgi
基于 http 类型,轻松在 Rust 中创建 CGI(通用网关接口)程序。
该仓库是从未维护的 https://github.com/amandasaurus/rust-cgi 分支出来的,该仓库作为 cgi crate 发布到 crates.io。
安装 & 使用
Cargo.toml:
[dependencies]
rust-cgi = "0.6"
使用 cgi_main! 宏,该宏接受一个 rust_cgi::Request 并返回一个 rust_cgi::Response 的函数。
extern crate rust_cgi as cgi;
cgi::cgi_main! { |request: cgi::Request| -> cgi::Response {
cgi::text_response(200, "Hello World")
} }
如果您的函数返回一个 Result,则可以使用 cgi_try_main!
extern crate rust_cgi as cgi;
cgi::cgi_try_main! { |request: cgi::Request| -> Result<cgi::Response, String> {
let greeting = std::fs::read_to_string("greeting.txt").map_err(|_| "Couldn't open file")?;
Ok(cgi::text_response(200, greeting))
} }
它将解析和提取 CGI 环境变量和 HTTP 请求体以创建 Request<u8>,调用您的函数以创建响应,并将您的 Response 转换为正确的格式并打印到 stdout。如果此程序不是作为 CGI 调用(例如,缺少必需的环境变量),则将优雅地回退到使用合理的值(尽管这些值本身可能会更改)。
也可以在您的 main 函数中直接调用 rust_cgi::handle 函数。
extern crate rust_cgi as cgi;
fn main() { cgi::handle(|request: cgi::Request| -> cgi::Response {
cgi::html_response(200, "<html><body><h1>Hello World!</h1></body></html>")
})}
响应快捷方式
几个快捷方式可以轻松创建
-
rust_cgi:empty_response(status_code)- 一个没有主体和该 HTTP 状态码的 HTTP 响应,例如return rust_igi::empty_response(404);返回一个 HTTP 404 Not Found。 -
rust_cgi::html_response(status_code, text)- 将text转换为字节(UTF8),并以该status_code和 HTMLContent-Type头部发送作为正文。 -
rust_cgi::string_response(status_code, text)- 将text转换为字节(UTF8),并以该status_code发送作为正文,但不发送Content-Type头部。 -
rust_cgi::binary_response(status_code, content_type, blob)- 以该状态码和提供的内容类型头部发送blob。
重新导出
http 被重新导出(作为 rust_cgi::http)。
rust_cgi::Response/Request 是 http::Response<Vec<u8>>/Request<Vec<u8>>。
本地运行
Python 提供了一个简单的 CGI 网络服务器,您可以使用它来运行您的脚本。二进制文件必须在 cgi-bin 目录中,因此您需要创建该目录并将您的二进制文件复制到其中。对于一个名为 example 的项目,在项目根目录中运行此命令(即 Cargo.toml 所在的位置)
mkdir cgi-bin
cargo build
cp target/debug/example cgi-bin/example
python3 -m http.server --cgi
然后打开 https://:8000/cgi-bin/example。
MSRV 政策
目前支持的最小 Rust 版本(MSRV)是 1.51.0。MSRV 的增加将保持在最低限度,并且将始终伴随着小版本号的增加。
另请参阅
为什么?
CGI 很旧,但易于部署。只需将二进制文件放置在正确的位置,Apache(或任何其他服务器)就会为您提供服务。Rust 很快,因此对于简单的事情,启动自定义 HTTP 服务器的缺点应该更少。
依赖关系
~625KB
~10K SLoC