httpタイプに基づいて、錆のCGI [1] [2]プログラム[3]を簡単に作成します。
Cargo.toml :
[依存関係] CGI = "0.6"
cgi_main!マクロ、 cgi::Requestてcgi::Responseを返す関数を備えています。
Extern Crate CGI;
CGI :: CGI_MAIN! {| request:cgi :: request | - > cgi :: response {
cgi :: text_response(200、 "hello world")
}}関数がResultを返す場合、 cgi_try_main! :
Extern Crate CGI;
cgi :: cgi_try_main! {| request:cgi :: request | - > result <cgi :: response、string> {
greed = std :: fs :: read_to_string( "greeting.txt")。map_err(| _ | "ファイルを開くことはできません")?;
ok(cgi :: text_response(200、挨拶))
}} CGI環境変数を解析および抽出し、HTTP要求本体をRequest<u8>を作成し、関数を呼び出して応答を作成し、 Response正しい形式に変換し、STDOUTに印刷します。このプログラムがCGIと呼ばれていない場合(例:必要な環境変数の欠落)、パニックになります。
また、 main関数内でcgi::handle関数を直接処理することも可能です。
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 Webサーバーを提供します。バイナリはcgi-binディレクトリにある必要があるため、そのディレクトリを作成してバイナリをコピーする必要があります。 exampleという名前のプロジェクトが与えられた場合、これをプロジェクトルートディレクトリ(つまり、 Cargo.tomlがある場所)で実行します。
mkdir cgi-bin 貨物ビルド CPターゲット/デバッグ/例CGI-BIN/例 python3 -m http.server - cgi
そして、http:// localhost:8000/cgi-bin/exampleを開きます。
「提案を歓迎します!」
HyperのHTTP。
http APIドキュメント
RFC 3875 -The Common Gateway Interface(CGI)v1.1
CGIは古く、展開しやすいです。適切な場所にバイナリを落とすだけで、Apache(または何でも)が提供されます。錆は速いので、単純なもののために、カスタムHTTPサーバーを紡ぐための欠点が少なくなるはずです。
Copyright GNU Affero GPL V3(またはそれ以降)。ファイルライセンスを参照してください