Mudah membuat program CGI [1] [2] [3] dalam karat berdasarkan jenis http .
Cargo.toml :
[Ketergantungan] CGI = "0,6"
Gunakan cgi_main! Makro, dengan fungsi yang mengambil cgi::Request dan mengembalikan cgi::Response .
CRATE ENTER CRATE CGI;
CGI :: CGI_MAIN! {| permintaan: cgi :: permintaan | -> CGI :: Response {
CGI :: Text_Response (200, "Hello World")
}} Jika fungsi Anda mengembalikan Result , Anda dapat menggunakan cgi_try_main! :
CRATE ENTER CRATE CGI;
CGI :: cgi_try_main! {| permintaan: cgi :: permintaan | -> hasil <cgi :: response, string> {
Biarkan ucapan = std :: fs :: read_to_string ("ucapan.txt"). Map_err (| _ | "tidak dapat membuka file")?;
OK (cgi :: text_response (200, salam))
}} Ini akan mengurai & mengekstrak variabel lingkungan CGI, dan badan permintaan HTTP untuk membuat Request<u8> , hubungi fungsi Anda untuk membuat respons, dan mengonversi Response Anda ke dalam format yang benar dan mencetak ke stdout. Jika program ini tidak disebut sebagai CGI (misalnya hilang variabel lingkungan yang diperlukan), itu akan panik.
Dimungkinkan juga untuk memanggil fungsi cgi::handle langsung di dalam fungsi main Anda:
CRATE ENTER CRATE CGI;
fn main () {cgi :: handle (| request: cgi :: request | -> cgi :: response {
CGI :: html_response (200, "<html> <hody> <h1> halo dunia! </h1> </body> </html>")
})} Beberapa jalan pintas membuat pintasan dengan mudah:
cgi:empty_response(status_code) Sebuah HTTP Reconse tanpa badan dan kode status HTTP itu, misalnya return cgi::empty_response(404); untuk mengembalikan http 404 yang tidak ditemukan.
cgi::html_response(status_code, text) Konversi text menjadi byte (UTF8) dan mengirimkannya sebagai tubuh dengan status_code dan header Content-Type HTML.
cgi::string_response(status_code, text) Mengubah text menjadi byte (utf8), dan mengirimkannya sebagai tubuh dengan status_code itu, misalnya `return
cgi::string_response(200, "Hello World!")Mengembalikan respons teks sederhana sederhana.
cgi::binary_response(status_code, blob) Mengirimkan blob dengan kode status itu.
http diekspor kembali, (sebagai cgi::http ).
cgi::Response / Request adalah http::Response<Vec<u8>> / Request<Vec<u8>> .
Python menyediakan server web CGI sederhana yang dapat Anda gunakan untuk menjalankan skrip Anda. Binari harus berada di direktori cgi-bin , jadi Anda harus membuat direktori itu dan menyalin biner Anda ke dalamnya. Diberikan example proyek, jalankan ini di direktori root proyek Anda (yaitu di mana Cargo.toml ):
mkdir cgi-bin membangun kargo CP Target/Debug/Contoh CGI-Bin/Contoh python3 -m http.server --cgi
dan kemudian buka http: // localhost: 8000/cgi-bin/contoh.
'Saran selamat datang!'
HTTP Hyper.
Dokumentasi API http
RFC 3875 - Antarmuka Gateway Umum (CGI) V1.1
CGI sudah tua, dan mudah digunakan. Cukup jatuhkan biner di tempat yang tepat, dan Apache (atau apa pun) akan menyajikannya. Karat cepat, jadi untuk hal -hal sederhana, harus ada lebih sedikit kerugian untuk memutar server HTTP khusus.
Hak cipta GNU Affero GPL V3 (atau lebih baru). Lihat lisensi file