根據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(或更高版本)。查看文件許可證