根据http类型,在Rust中轻松创建CGI [1] [2]程序[3] 。
Cargo.toml :
[依赖关系] CGI =“ 0.6”
使用cgi_main!宏,带有cgi::Request并返回cgi::Response函数。
外部板条箱CGI;
CGI :: CGI_MAIN! {|请求:CGI ::请求| - > cgi ::响应{
CGI :: Text_Response(200,“ Hello World”)
}}}如果您的功能返回Result ,则可以使用cgi_try_main! :
外部板条箱CGI;
CGI :: CGI_TRY_MAIN! {|请求:CGI ::请求| - >结果<cgi ::响应,字符串> {
让engering = std :: fs :: read_to_string(“ engring.txt”)。map_err(| _ |“无法打开文件”)?;
OK(CGI :: Text_Response(200,问候))
}}}它将解析和提取CGI环境变量,而HTTP请求正文创建Request<u8> ,调用您的功能以创建响应,然后将Response转换为正确的格式,然后打印到STDOUT。如果该程序不称为CGI(例如缺少所需的环境变量),则会恐慌。
也可以直接在main函数内直接调用cgi::handle函数:
外部板条箱CGI;
fn main(){cgi :: handle(| request:cgi :: request | - > cgi :: wesspons {
cgi :: html_response(200,“ <html> <body> <h1> hello world!</h1> </h1> </hody> </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正文发送,例如返回
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 Web服务器,您可以用来运行脚本。二进制文件必须在cgi-bin目录中,因此您需要创建该目录并将二进制复制到其中。给定一个名为example的项目,请在您的项目root目录(即Cargo.toml是)中运行此操作:
Mkdir CGI-bin 货物建造 CP目标/调试/示例CGI-BIN/示例 python3 -m http.server -cgi
然后打开http:// localhost:8000/cgi-bin/示例。
“欢迎建议!”
Hyper的HTTP。
http API文档
RFC 3875-公共网关接口(CGI)v1.1
CGI旧,易于部署。只需在正确的位置放置一个二进制,而Apache(或其他)都会为其提供服务。生锈是快速的,因此对于简单的事情,旋转自定义HTTP服务器的缺点应该减少。
版权GNU AFFERO GPL V3(或更高版本)。查看文件许可证