Erstellen Sie einfach CGI [1] [2] Programme [3] in Rost basierend auf http -Typen.
Cargo.toml :
[Abhängigkeiten] CGI = "0,6"
Verwenden Sie das cgi_main! Makro mit einer Funktion, die eine cgi::Request nimmt und eine cgi::Response zurückgibt.
externe Kiste CGI;
CGI :: CGI_MAIN! {| Anfrage: CGI :: Anfrage | -> cgi :: response {
CGI :: text_response (200, "Hallo Welt")
}} Wenn Ihre Funktion ein Result zurückgibt, können Sie cgi_try_main! :
externe Kiste CGI;
cgi :: cgi_try_main! {| Anfrage: CGI :: Anfrage | -> Ergebnis <cgi :: response, String> {
Lassen Sie Begrüßung = std :: fs :: read_to_string ("greeting.txt"). MAP_ERR (| _ | "" Cip nicht öffnen ")?;
OK (cgi :: text_response (200, Gruß))
}} Es wird die CGI -Umgebungsvariablen analysiert und extrahiert, und das HTTP -Anforderungsorganisation, um Request<u8> zu erstellen, Ihre Funktion aufzurufen, um eine Antwort zu erstellen, und Ihre Response in das richtige Format umwandeln und in STDOut drucken. Wenn dieses Programm nicht als CGI bezeichnet wird (z. B. fehlende erforderliche Umgebungsvariablen), wird es in Panik geraten.
Es ist auch möglich, die cgi::handle direkt in Ihrer main aufzurufen:
externe Kiste CGI;
fn main () {cgi :: Handle (| Anfrage: cgi :: request | -> cgi :: response {
cgi :: html_response (200, "<html> <body> <h1> Hallo Welt! </h1> </body> </html>")
})} Mehrere Verknüpfungen erstellen leicht Verknüpfungen:
cgi:empty_response(status_code) Eine HTTP -Antwort ohne Körper und diesen HTTP -Statuscode, z. B. return cgi::empty_response(404); um ein HTTP 404 zurückzugeben, nicht gefunden.
cgi::html_response(status_code, text) Konvertiert text in Bytes (UTF8) und sendet diesen als Körper mit diesem Header vom status_code und dem HTML Content-Type .
cgi::string_response(status_code, text) Konvertiert text in Bytes (UTF8) und sendet diesen als Körper mit diesem status_code , z. B. Rückgabe
cgi::string_response(200, "Hello World!")Gibt eine einfache einfache Textantwort zurück.
cgi::binary_response(status_code, blob) Sendet blob mit diesem Statuscode.
http wird erneut exportiert (als cgi::http ).
cgi::Response / Request sind http::Response<Vec<u8>> / Request<Vec<u8>> .
Python bietet einen einfachen CGI -Webserver, mit dem Sie Ihre Skripte ausführen können. Die Binärdateien müssen sich in einem cgi-bin -Verzeichnis befinden, sodass Sie dieses Verzeichnis erstellen und Ihre Binärdatum in sie kopieren müssen. Führen Sie dies bei einem Projekt namens example in Ihrem Projekt Root Directory aus (dh wo sich Cargo.toml befindet):
Mkdir cgi-bin Frachtbau CP-Ziel/Debug/Beispiel CGI-bin/Beispiel python3 -m http.server - -cgi
und dann eröffnen Sie http: // localhost: 8000/cgi-bin/Beispiel.
"Vorschläge willkommen!"
Hyper's http.
http -API -Dokumentation
RFC 3875 - Die gemeinsame Gateway -Grenzfläche (CGI) V1.1
CGI ist alt und einfach zu bereitstellen. Lassen Sie einfach eine Binärdatei am richtigen Ort fallen, und Apache (oder was auch immer) serviert es. Rost ist schnell. Bei einfachen Dingen sollte es weniger Nachteile geben, einen benutzerdefinierten HTTP -Server zu erstellen.
Copyright GNU Affero GPL v3 (oder höher). Siehe die Dateilizenz