Crie facilmente os programas CGI [1] [2] [3] em ferrugem com base nos tipos http .
Cargo.toml :
[Dependências] CGI = "0,6"
Use o cgi_main! Macro, com uma função que pega uma cgi::Request e retorna um cgi::Response .
CGI de caixa externa;
CGI :: CGI_Main! {| Solicitação: CGI :: Request | -> CGI :: Resposta {
CGI :: Text_Response (200, "Hello World")
}} Se sua função retornar um Result , você poderá usar cgi_try_main! :
CGI de caixa externa;
CGI :: CGI_TRY_MAIN! {| Solicitação: CGI :: Request | -> resultado <cGI :: Response, String> {
Deixe saudação = std :: fs :: read_to_string ("saudação.txt"). map_err (| _ | "não conseguiu abrir o arquivo")?;
OK (CGI :: Text_Response (200, saudação))
}} Ele analisará e extrairá as variáveis ambientais do CGI, e o órgão de solicitação HTTP para criar Request<u8> , chamará sua função para criar uma resposta e converter sua Response no formato correto e imprimir para o stdout. Se este programa não for chamado de CGI (por exemplo, faltando variáveis ambientais necessárias), ele entrará em pânico.
Também é possível chamar a função cgi::handle diretamente dentro de sua função main :
CGI de caixa externa;
fn main () {cgi :: handle (| solicitação: cgi :: request | -> cgi :: Resposta {
CGI :: html_ressonse (200, "<html> <body> <h1> Olá mundo! </h1> </body> </html>")
})} Vários atalhos criam atalhos facilmente:
cgi:empty_response(status_code) Uma resposta http sem corpo e esse código de status HTTP, por exemplo, return cgi::empty_response(404); para devolver um http 404 não encontrado.
cgi::html_response(status_code, text) Converte text em bytes (UTF8) e envia isso como o corpo com o cabeçalho Content-Type status_code e HTML.
cgi::string_response(status_code, text) Converte text em bytes (UTF8) e envia isso como o corpo com esse status_code , por exemplo, retorno
cgi::string_response(200, "Hello World!")Retorna uma resposta simples de texto simples.
cgi::binary_response(status_code, blob) Envia blob com esse código de status.
http é reexportado (como cgi::http ).
cgi::Response / Request são http::Response<Vec<u8>> / Request<Vec<u8>> .
O Python fornece um servidor da Web CGI simples que você pode usar para executar seus scripts. Os binários devem estar em um diretório cgi-bin ; portanto, você precisará criar esse diretório e copiar seu binário para ele. Dado um projeto chamado example , execute isso no seu diretório raiz do seu projeto (ou seja, onde Cargo.toml está):
mkdir cgi-bin Construção de carga CP Target/Debug/Exemplo CGI-BIN/Exemplo python3 -m http.server -cgi
e depois abra http: // localhost: 8000/cGi-bin/exemplo.
'Sugestões bem -vindas!'
http hyper.
Documentação da API http
RFC 3875 - A interface de gateway comum (CGI) v1.1
O CGI é antigo e fácil de implantar. Basta soltar um binário no lugar certo e o Apache (ou o que quer) o servirá. A ferrugem é rápida; portanto, para coisas simples, deve haver menos desvantagens para aumentar um servidor HTTP personalizado.
Copyright GNU Affero GPL V3 (ou mais tarde). Veja a licença do arquivo