Cree fácilmente los programas CGI [1] [2] [3] en óxido en función de los tipos http .
Cargo.toml :
[Dependencias] CGI = "0.6"
¡Usa el cgi_main! Macro, con una función que toma una cgi::Request y devuelve una cgi::Response .
CGI EXTERMA CGI;
CGI :: CGI_MAIN! {| solicitud: cgi :: request | -> cgi :: respuesta {
CGI :: Text_Response (200, "Hello World")
}} Si su función devuelve un Result , ¡puede usar cgi_try_main! :
CGI EXTERMA CGI;
CGI :: CGI_try_Main! {| solicitud: cgi :: request | -> resultado <cgi :: respuesta, cadena> {
Let Greeting = std :: fs :: read_to_string ("greeting.txt"). MAP_ERR (| _ | "No se pudo abrir el archivo")?;
OK (CGI :: Text_Response (200, Saludo))
}} Analizará y extraerá las variables ambientales CGI, y el cuerpo de solicitudes HTTP para crear Request<u8> , llamar a su función para crear una respuesta y convertir su Response en el formato correcto e imprimir en stdout. Si este programa no se llama como CGI (por ejemplo, faltando variables ambientales requeridas), entrará en pánico.
También es posible llamar a la función cgi::handle directamente dentro de su función main :
CGI EXTERMA CGI;
fn main () {cgi :: handle (| solicitud: cgi :: request | -> cgi :: respuesta {
CGI :: HTML_RESPONDE (200, "<html> <body> <h1> ¡Hola mundo! </h1> </body> </html>")
})} Varios atajos crean accesos directos fácilmente:
cgi:empty_response(status_code) Una respuesta http sin cuerpo y ese código de estado HTTP, por ejemplo, return cgi::empty_response(404); Para devolver un HTTP 404 no encontrado.
cgi::html_response(status_code, text) Convierte text a bytes (UTF8) y lo envía como el cuerpo con ese encabezado Content-Type status_code y HTML.
cgi::string_response(status_code, text) Convierte text a bytes (UTF8) y lo envía como el cuerpo con ese status_code , por ejemplo, regresar
cgi::string_response(200, "Hello World!")Devuelve una respuesta simple de texto plano.
cgi::binary_response(status_code, blob) Envía blob con ese código de estado.
http se reexporta (como cgi::http ).
cgi::Response / Request son http::Response<Vec<u8>> / Request<Vec<u8>> .
Python proporciona un servidor web CGI simple que puede usar para ejecutar sus scripts. Los binarios deben estar en un directorio cgi-bin , por lo que deberá crear ese directorio y copiar su binario en él. Dado un proyecto llamado example , ejecute esto en el Directorio Root de su proyecto (es decir, donde Cargo.toml es):
mkdir cgi-bin construcción de carga CP Target/Debug/Ejemplo CGI-Bin/Ejemplo python3 -m http.server - -cgi
y luego abra http: // localhost: 8000/cgi-bin/ejemplo.
'¡Sugerencias bienvenidas!'
HTTP de Hyper.
documentación de la API http
RFC 3875 - La interfaz de puerta de enlace común (CGI) v1.1
CGI es viejo y fácil de implementar. Simplemente deje caer un binario en el lugar correcto, y Apache (o lo que sea) lo servirá. El óxido es rápido, por lo que para cosas simples, debe haber menos desventajas para girar un servidor HTTP personalizado.
Copyright GNU Affero GPL V3 (o posterior). Ver la licencia de archivo