قم بسهولة بإنشاء CGI [1] [2] برامج [3] في الصدأ بناءً على أنواع http .
Cargo.toml :
[تبعيات] CGI = "0.6"
استخدم cgi_main! الماكرو ، مع وظيفة تأخذ cgi::Request وإرجاع cgi::Response .
قفص خارجي CGI ؛
CGI :: cgi_main! {| طلب: CGI :: طلب | -> CGI :: Response {
CGI :: Text_response (200 ، "Hello World")
}} إذا كانت وظيفتك تُرجع Result ، فيمكنك استخدام cgi_try_main! :
قفص خارجي CGI ؛
CGI :: cgi_try_main! {| طلب: CGI :: طلب | -> النتيجة <cgi :: response ، string> {
دع تحية = 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 (| 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 إلى Bytes (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 بسيط يمكنك استخدامه لتشغيل البرامج النصية الخاصة بك. يجب أن تكون الثنائيات في دليل cgi-bin ، لذلك ستحتاج إلى إنشاء هذا الدليل ونسخ ثنائي فيه. نظرًا لمشروع example ، قم بتشغيل هذا في دليل جذر المشروع الخاص بك (أي مكان Cargo.toml ):
MKDIR CGI-BIN بناء البضائع CP Target/Debug/مثال CGI-BIN/مثال Python3 -M http.server -CGI
ثم افتح http: // localhost: 8000/cgi-bin/مثال.
"اقتراحات مرحبًا!"
Hyper's HTTP.
http API Documentation
RFC 3875 - واجهة البوابة المشتركة (CGI) v1.1
CGI قديم ، وسهل النشر. ما عليك سوى إسقاط ثنائي في المكان الصحيح ، وسيخدمها أباتشي (أو أي شيء آخر). الصدأ سريع ، لذلك بالنسبة للأشياء البسيطة ، يجب أن يكون هناك جوانب سلبية أقل لدور خادم HTTP مخصص.
حقوق الطبع والنشر GNU Affero GPL V3 (أو لاحقًا). انظر ترخيص الملف