Легко создавать программы 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> {
let Greeting = 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 (| запрос: 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 в байты (UTF8) и отправляет это в качестве тела с помощью этого заголовка status_code и HTML Content-Type .
cgi::string_response(status_code, text) Преобразует text в байты (UTF8) и отправляет его в качестве тела с этим status_code , например `return
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-бин Грузовой сборка CP Target/DEBUG/Пример CGI-BIN/Пример python3 -m http.server -cgi
и затем откройте http: // localhost: 8000/cgi-bin/пример.
'Предложения приветствуются!'
Hyper's http.
http api документация
RFC 3875 - Общий интерфейс шлюза (CGI) v1.1
CGI старый, и его легко развернуть. Просто бросьте бинарку в нужном месте, и Apache (или что -то еще) будет обслуживать его. Ржавчина быстра, поэтому для простых вещей должно быть меньше недостатков, чтобы раскручивать пользовательский HTTP -сервер.
Copyright GNU Affero GPL V3 (или более позднее). Смотрите лицензию на файл