cgi
Этот модуль реализует вспомогательные процедуры для CGI-приложений. Пример:
import strtabs, cgi
# Fill the values when debugging:
when debug:
setTestData("name", "Klaus", "password", "123456")
# read the data into `myData`
var myData = readData()
# check that the data's variable names are "name" or "password"
validateData(myData, "name", "password")
# start generating content:
writeContentType()
# generate content:
write(stdout, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n")
write(stdout, "<html><head><title>Test</title></head><body>\n")
writeLine(stdout, "your name: " & myData["name"])
writeLine(stdout, "your password: " & myData["password"])
writeLine(stdout, "</body></html>") Импорты
- strutils, os, strtabs, cookies, uri
Типы
CgiError = object of IOError
- исключение, которое генерируется при ошибке CGI Исходный код Редактировать
RequestMethod = enum methodNone, ## no REQUEST_METHOD environment variable methodPost, ## query uses the POST method methodGet ## query uses the GET method
- используемый метод запроса Исходный код Редактировать
Процедуры
proc xmlEncode(s: string): string {...}{.raises: [], tags: [].}- Кодирует значение для безопасного использования в XML:
-
"заменяется на" -
<заменяется на< -
>заменяется на> -
&заменяется на& - все остальные символы передаются.
-
proc cgiError(msg: string) {...}{.noreturn, raises: [CgiError], tags: [].}- генерирует исключение ECgi с сообщением
msg. Исходный код Изменить proc readData(allowedMethods: set[RequestMethod] = {methodNone, methodPost, methodGet}): StringTableRef {...}{.raises: [CgiError, ValueError, IOError], tags: [ReadEnvEffect, ReadIOEffect].}- Чтение данных CGI. Если клиент не использует метод, указанный в
allowedMethodsнаборе, возникает исключениеECgi. Исходный код Изменить proc readData(data: string): StringTableRef {...}{.raises: [CgiError], tags: [].}- Чтение данных CGI из строки. Исходный код Изменить
proc validateData(data: StringTableRef; validKeys: varargs[string]) {...}{. raises: [CgiError], tags: [].}- валидирует данные; если это не удаётся, генерируется
ECgi. Это проверяет, что каждое имя переменной в CGIdataприсутствует в массивеvalidKeys. Исходный код Изменить proc getContentLength(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
CONTENT_LENGTHИсходный код Изменить proc getContentType(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
CONTENT_TYPEИсходный код Изменить proc getDocumentRoot(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
DOCUMENT_ROOTИсходный код Изменить proc getGatewayInterface(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
GATEWAY_INTERFACEИсходный код Изменить proc getHttpAccept(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
HTTP_ACCEPTИсходный код Изменить proc getHttpAcceptCharset(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
HTTP_ACCEPT_CHARSETИсходный код Изменить proc getHttpAcceptEncoding(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
HTTP_ACCEPT_ENCODINGИсходный код Изменить proc getHttpAcceptLanguage(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
HTTP_ACCEPT_LANGUAGEИсходный код Изменить proc getHttpConnection(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
HTTP_CONNECTIONИсходный код Изменить proc getHttpCookie(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
HTTP_COOKIEИсходный код Изменить proc getHttpHost(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
HTTP_HOSTИсходный код Изменить proc getHttpReferer(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
HTTP_REFERERИсходный код Изменить proc getHttpUserAgent(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
HTTP_USER_AGENTИсходный код Изменить proc getPathInfo(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
PATH_INFOИсходный код Изменить proc getPathTranslated(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
PATH_TRANSLATEDИсходный код Изменить proc getQueryString(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
QUERY_STRINGИсходный код Изменить proc getRemoteAddr(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
REMOTE_ADDRИсходный код Изменить proc getRemoteHost(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
REMOTE_HOSTИсходный код Изменить proc getRemoteIdent(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
REMOTE_IDENTИсходный код Изменить proc getRemotePort(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
REMOTE_PORTИсходный код Изменить proc getRemoteUser(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
REMOTE_USERИсходный код Изменить proc getRequestMethod(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
REQUEST_METHODИсходный код Изменить proc getRequestURI(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
REQUEST_URIИсходный код Изменить proc getScriptFilename(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
SCRIPT_FILENAMEИсходный код Изменить proc getScriptName(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
SCRIPT_NAMEИсходный код Изменить proc getServerAddr(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
SERVER_ADDRИсходный код Изменить proc getServerAdmin(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
SERVER_ADMINИсходный код Изменить proc getServerName(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
SERVER_NAMEИсходный код Изменить proc getServerPort(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
SERVER_PORTИсходный код Изменить proc getServerProtocol(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной окружения
SERVER_PROTOCOLИсходный код Изменить proc getServerSignature(): string {...}{.raises: [], tags: [ReadEnvEffect].}
- возвращает содержимое переменной среды
SERVER_SIGNATUREИсходный код Изменить proc getServerSoftware(): string {...}{.raises: [], tags: [ReadEnvEffect].}- возвращает содержимое переменной среды
SERVER_SOFTWAREИсходный код Изменить proc setTestData(keysvalues: varargs[string]) {...}{.raises: [OSError], tags: [WriteEnvEffect].}- заполняет соответствующие переменные среды для тестирования вашего CGI-приложения. Это может только смоделировать метод запроса 'GET'.
keysvaluesдолжны предоставить вложенные пары (имя, значение). Пример:setTestData("name", "Hanz", "password", "12345")Исходный код Изменить proc writeContentType() {...}{.raises: [IOError], tags: [WriteIOEffect].}- вызовите эту функцию перед началом отправки данных HTML в
stdout. Это реализует часть протокола CGI:write(stdout, "Content-type: text/html\n\n")
Исходный код Изменить proc writeErrorMessage(data: string) {...}{.raises: [IOError], tags: [WriteIOEffect].}- Попытка сбросить состояние браузера и запись
dataв stdout в тэге <plaintext>. Исходный код Изменить proc setStackTraceStdout() {...}{.raises: [], tags: [].}- Заставляет Nim выводить отладочные сообщения в stdout вместо файла журнала сервера. Исходный код Изменить
proc setCookie(name, value: string) {...}{.raises: [IOError], tags: [WriteIOEffect].}- Устанавливает cookie. Исходный код Изменить
proc getCookie(name: string): TaintedString {...}{.raises: [], tags: [ReadEnvEffect].}- Получает cookie. Если cookie
nameне существует, возвращается "". Исходный код Изменить proc existsCookie(name: string): bool {...}{.raises: [], tags: [ReadEnvEffect].}- Проверяет, существует ли cookie
name. Исходный код Изменить
Итераторы
iterator decodeData(data: string): tuple[key, value: TaintedString] {...}{. raises: [CgiError], tags: [].}- Читает и декодирует данные CGI, возвращая пары (имя, значение), из которых состоят данные. Исходный код Изменить
iterator decodeData(allowedMethods: set[RequestMethod] = {methodNone, methodPost, methodGet}): tuple[key, value: TaintedString] {...}{. raises: [CgiError, ValueError, IOError], tags: [ReadEnvEffect, ReadIOEffect].}- Читает и декодирует данные CGI, возвращая пары (имя, значение), из которых состоят данные. Если клиент не использует метод, указанный в
allowedMethodsнаборе, возникает исключениеECgi. Исходный код Изменить
Экспорт
- encodeUrl, decodeUrl
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/cgi.html