สร้าง CGI ได้อย่างง่ายดาย [1] [2] โปรแกรม [3] ในสนิมตามประเภท http
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 :: การตอบสนอง, สตริง> {
ให้คำอวยพร = std :: fs :: read_to_string ("greeting.txt"). map_err (| _ | "ไม่สามารถเปิดไฟล์")?;
ตกลง (cgi :: text_response (200, ทักทาย)))
- มันจะแยกวิเคราะห์และแยกแยะตัวแปรสภาพแวดล้อม CGI และร่างกายคำขอ HTTP เพื่อสร้าง Request<u8> โทรหาฟังก์ชั่นของคุณเพื่อสร้างการตอบกลับและแปลง Response ของคุณเป็นรูปแบบที่ถูกต้องและพิมพ์เป็น stdout หากโปรแกรมนี้ไม่ได้เรียกว่า CGI (เช่นตัวแปรสภาพแวดล้อมที่ขาดหายไป) มันจะตื่นตระหนก
นอกจากนี้ยังเป็นไปได้ที่จะเรียกฟังก์ชั่น cgi::handle โดยตรงภายในฟังก์ชั่น main ของคุณ:
ลังภายนอก CGI;
fn main () {cgi :: handle (| คำขอ: cgi :: คำขอ | -> cgi :: การตอบสนอง {
cgi :: html_response (200, "<html> <body> <h1> Hello World! </h1> </body> </html>"
- ทางลัดหลายทางสร้างทางลัดได้อย่างง่ายดาย:
cgi:empty_response(status_code) http reponse ที่ไม่มีร่างกายและรหัสสถานะ HTTP เช่น return cgi::empty_response(404); เพื่อส่งคืน HTTP 404 ไม่พบ
cgi::html_response(status_code, text) แปลง text เป็นไบต์ (UTF8) และส่งสิ่งนั้นเป็น Content-Type ของ status_code และ HTML
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 การขนส่งสินค้า cp target/debug/ตัวอย่าง cgi-bin/ตัวอย่าง Python3 -m http.server --cgi
จากนั้นเปิด http: // localhost: 8000/cgi-bin/ตัวอย่าง
'ยินดีต้อนรับคำแนะนำ!'
HTTP ของ Hyper
เอกสาร http API
RFC 3875 - อินเตอร์เฟสเกตเวย์ทั่วไป (CGI) v1.1
CGI นั้นเก่าและง่ายต่อการปรับใช้ เพียงแค่วางไบนารีในสถานที่ที่เหมาะสมและ Apache (หรืออะไรก็ตาม) จะให้บริการ Rust นั้นรวดเร็วดังนั้นสำหรับสิ่งที่เรียบง่ายควรมีข้อเสียน้อยกว่าในการหมุนเซิร์ฟเวอร์ HTTP ที่กำหนดเอง
ลิขสิทธิ์ GNU Affero GPL V3 (หรือใหม่กว่า) ดูใบอนุญาตไฟล์