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
然后打开 http://localhost:8000/cgi-bin/example。
MSRV 政策
目前支持的最小 Rust 版本(MSRV)是 1.51.0。MSRV 的增加将保持在最低限度,并且将始终伴随着小版本号的增加。
另请参阅
为什么?
CGI 很旧,但易于部署。只需将二进制文件放置在正确的位置,Apache(或任何其他服务器)就会为您提供服务。Rust 很快,因此对于简单的事情,启动自定义 HTTP 服务器的缺点应该更少。
依赖关系
~625KB
~10K SLoC