7 个版本 (有重大变更)
使用旧的 Rust 2015
0.6.1-rc1 | 2022年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
每月下载量 151
21KB
263 行
rust-cgi
基于 http
类型,在 Rust 中轻松创建 CGIfootnote:[Retro!]footnote:[通用网关接口 1.1,RFC 3875] 程序footnote:[是的,我拼写了 programme,这是正确的拼写方式.]。
: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
/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://127.0.0.1:8000/cgi-bin/example[]。
另请参阅
使用此功能的事物
- “欢迎建议!”
资源
- 链接:hyper的http。
- 链接:
http
API文档 - 链接:RFC 3875 - 公共网关接口(CGI)v1.1
为什么?
CGI很旧,部署简单。只需将二进制文件放入正确的位置,Apache(或任何其他服务器)就会提供它。Rust速度快,因此对于简单的事情,启动自定义HTTP服务器应该不会有太多缺点。
版权
版权链接:https://www.gnu.org/licenses/agpl-3.0.en.html[GNU Affero GPL v3(或更高版本)]。请参阅文件 LICENCE。
依赖项
~575KB