Регистрация | Войти
Lisp — программируемый язык программирования

Hunchentoot. FAQ.

Информация о запросе

Как получить GET-параметры запроса?

(hunchentoot:get-parameter "myparam")

Либо, для получения сразу всех GET-параметров

(hunchentoot:get-parametrs*)

Как получить POST-параметры запроса?

(hunchentoot:post-parameter "myparam")

Либо, для получения сразу всех POST-параметров

(hunchentoot:post-parametrs*)

Формирование ответа

Как установить content-type ответа, например в image/jpeg

(setf (hunchentoot:content-type*)
      "image/jpeg"
)

Как добавить к ответу произвольный заголовок?

(setf (hunchentoot:header-out "MyHeader")
      "MyValue"
)

Как вернуть страницу в кодировке utf-8/windows-1251/etc

По-умолчанию, hunchentoot использует кодировку latin-1. Для вывода результата в кодировке UTF-8 обычно достаточно изменить значение переменной hunchentoot:*hunchentoot-default-external-format* :

(setf hunchentoot:*hunchentoot-default-external-format* 
      hunchentoot::+utf-8+
)

Однако, при необходимости работать с windows-1251 дело усложнятся тем, что используемая для перекодировки библиотека flexi-streams не поддерживает данную кодировку, как, впрочем, и многие другие. К счастью, проблема может быть достаточно просто решена если возвращать из обработчика запроса не строку, а массив octets в нужной кодировке. Вот пример простейшего приложения, выводящего "Привет мир!" в кодировке windows-1251 (данный пример может быть легко адаптирован для любой другой кодировки).

(asdf:operate 'asdf:load-op 'hunchentoot)

(defun request-handler (req)
  (sb-ext:string-to-octets "Привет мир!" :external-format :windows-1251)
)


(hunchentoot:start (make-instance 'hunchentoot:acceptor
                                  :request-dispatcher 'request-handler
                                  :port 8080
)
)

В данном примере используется функция sb-ext:string-to-octets, которая доступна только для SBCL. Для большей переносимости можно использовать аналогичную функцию из библиотеки babel. Правда, на момент написания данного текста, последний релиз данной библиотеки (который был достаточно давно) не включал в себя поддержку cp1251, но она (поддержка) уже была в darcs-версии и автор библиотеки обещал выпустить новый релиз в самое ближайшее время.

Валидный перевод документации по Hunchentoot

http://wiki.lissyara.su/wiki/Hunchentoot

@2009-2013 lisper.ru