Créez facilement les programmes CGI [1] [2] [3] dans la rouille en fonction des types http .
Cargo.toml :
[dépendances] cgi = "0,6"
Utilisez le cgi_main! Macro, avec une fonction qui prend une cgi::Request et renvoie une cgi::Response .
caisse externe CGI;
CGI :: CGI_MAIN! {| Demande: CGI :: Demande | -> CGI :: Response {
CGI :: Text_Response (200, "Hello World")
}} Si votre fonction renvoie un Result , vous pouvez utiliser cgi_try_main! :
caisse externe CGI;
CGI :: CGI_TRY_MAIN! {| Demande: CGI :: Demande | -> Résultat <CGI :: Response, String> {
Laissez Greeting = std :: fs :: read_to_string ("saluer.txt"). map_err (| _ | "ne pouvait pas ouvrir le fichier")?;
OK (CGI :: Text_Response (200, salutation))
}} Il analysera et extraire les variables environnementales CGI, et le corps de demande HTTP pour créer Request<u8> , appelez votre fonction pour créer une réponse et convertissez votre Response en format correct et imprimez à STDOUT. Si ce programme n'est pas appelé CGI (par exemple, les variables environnementales requises manquantes), elle paniquera.
Il est également possible d'appeler la fonction cgi::handle directement dans votre fonction main :
caisse externe CGI;
fn main () {cgi :: handle (| request: cgi :: request | -> cgi :: réponse {
cgi :: html_response (200, "<html> <body> <h1> Bonjour le monde! </h1> </ body> </html>")
})} Plusieurs raccourcis créent facilement des raccourcis:
cgi:empty_response(status_code) Une réponse HTTP sans corps et ce code d'état HTTP, par exemple return cgi::empty_response(404); Pour retourner un HTTP 404 introuvable.
cgi::html_response(status_code, text) Convertit text en octets (UTF8) et l'envoie comme le corps avec cet en-tête status_code et HTML Content-Type .
cgi::string_response(status_code, text) Convertit text en octets (UTF8) et envoie cela comme le corps avec ce status_code , par exemple
cgi::string_response(200, "Hello World!")Renvoie une simple réponse en texte brut.
cgi::binary_response(status_code, blob) Envoie blob avec ce code d'état.
http est réexporté (comme cgi::http ).
cgi::Response / Request est http::Response<Vec<u8>> / Request<Vec<u8>> .
Python fournit un serveur Web CGI simple que vous pouvez utiliser pour exécuter vos scripts. Les binaires doivent être dans un répertoire cgi-bin , vous devrez donc créer ce répertoire et y copier votre binaire. Compte tenu d'un projet nommé example , exécutez-le dans le répertoire des racines de votre projet (c'est-à-dire où est Cargo.toml ):
MKDIR CGI-BIN construction de cargaison cible CP / débogage / exemple CGI-Bin / Exemple python3 -m http.server --cgi
puis ouvrir http: // localhost: 8000 / cgi-bin / exemple.
«Les suggestions sont les bienvenues!
Http d'Hyper.
Documentation de l'API http
RFC 3875 - L'interface de passerelle commune (CGI) v1.1
CGI est ancien et facile à déployer. Déposez simplement un binaire au bon endroit, et Apache (ou autre) le servira. La rouille est rapide, donc pour des choses simples, il devrait y avoir moins d'inconvénients pour faire tourner un serveur HTTP personnalisé.
Copyright GNU Affero GPL V3 (ou version ultérieure). Voir la licence de fichier