http 유형을 기반으로 녹에서 CGI [1] [2] 프로그램 [3] 을 쉽게 만들 수 있습니다.
Cargo.toml :
[종속성] CGI = "0.6"
cgi_main! cgi::Request 취하고 cgi::Response 반환하는 함수가있는 매크로.
외부 상자 CGI;
cgi :: cgi_main! {| 요청 : cgi :: 요청 | -> cgi :: 응답 {
CGI :: Text_Response (200, "Hello World")
}} 함수가 Result 반환하면 cgi_try_main! :
외부 상자 CGI;
cgi :: cgi_try_main! {| 요청 : cgi :: 요청 | -> 결과 <cgi :: 응답, 문자열> {
greeting = std :: fs :: read_to_string ( "greeting.txt"). map_err (| _ | "파일을 열 수 없다");
OK (cgi :: text_response (200, 인사말)))
}} CGI 환경 변수를 구문 분석하고 추출하고 HTTP 요청 본문을 통해 Request<u8> 작성하고 기능을 호출하여 응답을 작성하고 Response 올바른 형식으로 변환하고 StdOut으로 인쇄합니다. 이 프로그램이 CGI (예 : 필수 환경 변수 누락)로 호출되지 않으면 당황하게됩니다.
cgi::handle main 기능 내에서 직접 기능을 호출 할 수도 있습니다.
외부 상자 CGI;
fn main () {cgi :: handle (| request : cgi :: request | -> cgi :: 응답 {
cgi :: html_response (200, "<html> <body> <h1> Hello World! </h1> </body> </html>")
})} 여러 바로 가기가 쉽게 바로 가기를 만듭니다.
cgi:empty_response(status_code) 본문이없고 HTTP 상태 코드가있는 http Reponse, 예를 들어 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 와 함께 본문으로 보냅니다.
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 웹 서버를 제공합니다. Binaries는 cgi-bin 디렉토리에 있어야하므로 해당 디렉토리를 작성하고 이진을 복사해야합니다. example 라는 프로젝트가 주어지면 프로젝트 루트 디렉토리 (예 : Cargo.toml 이 어디에 있는지)에서 실행하십시오.
mkdir cgi-bin 화물 빌드 CP 대상/디버그/예제 CGI-BIN/예제 python3 -m http.server -cgi
그런 다음 http : // localhost : 8000/cgi-bin/example을 엽니 다.
'제안을 환영합니다!'
하이퍼의 HTTP.
http API 문서
RFC 3875- 공통 게이트웨이 인터페이스 (CGI) v1.1
CGI는 오래되었고 배포하기 쉽습니다. 바이너리를 올바른 장소에 떨어 뜨리면 Apache (또는 무엇이든)를 제공합니다. 녹이 빠르기 때문에 간단한 일을 위해서는 사용자 정의 HTTP 서버를 회전시키는 데 더 적은 단점이 있어야합니다.
저작권 gnu affero gpl v3 (또는 이후). 파일 라이센스를 참조하십시오