7 个版本 (有重大变更)

使用旧的 Rust 2015

0.6.1-rc12022年11月6日
0.6.0 2020年5月27日
0.5.0 2020年4月11日
0.4.0 2020年4月11日
0.1.0 2018年12月8日

HTTP 服务器 中排名 356

Download history 51/week @ 2024-03-11 35/week @ 2024-03-18 31/week @ 2024-03-25 79/week @ 2024-04-01 26/week @ 2024-04-08 29/week @ 2024-04-15 55/week @ 2024-04-22 42/week @ 2024-04-29 34/week @ 2024-05-06 33/week @ 2024-05-13 46/week @ 2024-05-20 39/week @ 2024-05-27 40/week @ 2024-06-03 29/week @ 2024-06-10 38/week @ 2024-06-17 36/week @ 2024-06-24

每月下载量 151

AGPL-3.0

21KB
263

rust-cgi

基于 http 类型,在 Rust 中轻松创建 CGIfootnote:[Retro!]footnote:[通用网关接口 1.1,RFC 3875] 程序footnote:[是的,我拼写了 programme,这是正确的拼写方式.]。

crates.io released version badge crates.io released licencegpl

:toc

安装 & 使用

Cargo.toml:

[code,toml]

[dependencies]
cgi = "0.6"

使用宏 cgi_main!,该宏接收一个函数,该函数接受一个 cgi::Request 并返回一个 cgi::Response

[code,rust]

extern crate cgi;

cgi::cgi_main! { |request: cgi::Request| -> cgi::Response {
     cgi::text_response(200, "Hello World")
} }

如果您的函数返回一个 Result,则可以使用 cgi_try_main!

[code,rust]

extern crate 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 函数内部调用 cgi::handle 函数

[code,rust]

extern crate cgi;

fn main() { cgi::handle(|request: cgi::Request| -> cgi::Response {
    cgi::html_response(200, "<html><body><h1>Hello World!</h1></body></html>")
})}

响应快捷方式

几个快捷方式可以轻松创建快捷方式

cgi:empty_response(status_code):: 一个没有主体且包含该HTTP状态码的HTTP响应,例如:return cgi::empty_response(404); 返回一个链接:HTTP 404 未找到cgi::html_response(status_code, text):: 将 text 转换为字节(UTF8),并以该 status_code 和HTML Content-Type 头部发送该字节。 cgi::string_response(status_code, text):: 将 text 转换为字节(UTF8),并以该 status_code 发送该字节,例如:return cgi::string_response(200, "Hello World!"):: 返回一个简单的纯文本响应. cgi::binary_response(status_code, blob):: 发送 blob` 以该状态码。

重新导出

http 被重新导出(作为 cgi::http)。

cgi::Response/Requesthttp::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://127.0.0.1:8000/cgi-bin/example[]

另请参阅

使用此功能的事物

  • “欢迎建议!”

资源

为什么?

CGI很旧,部署简单。只需将二进制文件放入正确的位置,Apache(或任何其他服务器)就会提供它。Rust速度快,因此对于简单的事情,启动自定义HTTP服务器应该不会有太多缺点。

版权

版权链接:https://www.gnu.org/licenses/agpl-3.0.en.html[GNU Affero GPL v3(或更高版本)]。请参阅文件 LICENCE

依赖项

~575KB