hunchentoot-cgi в основном работает с hunchentoot-1.2.2, теперь с некоторыми изменениями:
- В
#'handle-cgi-script
, заменяя :external-format tbnl::+latin-1+
на :external-format tbnl::+utf-8+
Как предложил WhiteCat, используйте #'make-pathname
, как показано ниже:
(pushnew (hunchentoot-cgi::create-cgi-dispatcher-and-handler
"/cgi-bin/"
(make-pathname :directory '(:absolute "media" "E"
"myapp" "cgi-bin")))
dispatch-table :test #'equal)
Однако я не понимаю, почему скрипт python не может получить параметр POSTed, т. Е. При посещении http://127.0.0:8000/cgi-bin/login.py?cmd=view
, login.py может получить значение параметра cmd
успешно, но при регистрации в следующей форме login.py не может получить все опубликованные значения (независимо от того, скрыты они или нет):
<html><body>
<form method='POST' action='cgi-bin/login.py'>
<input type='text' name='userid'>
<input type='password' name='userpwd'>
<input type='submit' value='Login'>
<input type='hidden' name='cmd' value='view'>
</form>
</body></html>
Я полагаю, что hunchentoot-cgi не передает опубликованные параметры в скрипт python в соответствии со средой:
GET http://127.0.0.1:8000/cgi-bin/nav.py?userid=xyz&cmd=view
Среда, переданная скрипту python,:
(SERVER_SOFTWARE=hunchentoot/1.2.2
SERVER_NAME=127.0.0.1 GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1 SERVER_PORT=8000 REQUEST_METHOD=GET
CONTENT_TYPE=text/html CONTENT_LENGTH=NIL
SCRIPT_NAME=/cgi-bin/nav.py QUERY_STRING=userid=xyz&cmd=view
REMOTE_ADDR=127.0.0.1 HTTP_HOST=NIL
REQUEST_URI=/cgi-bin/nav.py?userid=xyz&cmd=view SERVER_ADDR=NIL
HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux i686; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
HTTP_REFERER=http://127.0.0.1:8000/)
POST для /cgi-bin/nav.py
(SERVER_SOFTWARE=hunchentoot/1.2.2
SERVER_NAME=127.0.0.1 GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1 SERVER_PORT=8000 REQUEST_METHOD=POST
CONTENT_TYPE=text/html CONTENT_LENGTH=NIL
POST_PARAMETERS=((userid . xyz) (userpwd . 123) (cmd . view))
SCRIPT_NAME=/cgi-bin/nav.py QUERY_STRING=NIL REMOTE_ADDR=127.0.0.1
HTTP_HOST=NIL REQUEST_URI=/cgi-bin/nav.py SERVER_ADDR=NIL
HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux i686; rv:9.0.1) Gecko/20100101 Firefox/9.0.1
Я думаю, что "CONTENT_LENGTH = NIL" не так, не так ли?
Пожалуйста, пролите свет на меня, спасибо!