Получить заголовки HTTP как список

Я хочу получить URL перенаправления HTTP-запроса, используя drakma. Если я перейду на " http://lisp.org/", я хочу вернуть " http://lisp.org/index.html". Глядя на документы, похоже, что я хочу, чтобы заголовки были списком и drakma:http-request должен дать мне список.

Функция возвращает СЕМЬ значений - тело ответа (но см. Ниже), код состояния в виде целого числа, список заголовков, отправленных сервером, где для каждого элемента автомобиль (имя заголовка) является ключевым словом и cdr (значение заголовка) является строкой....

Когда я бегу drakma:http-request Я получаю тело сообщения и заголовки отображаются, если я делаю (setf drakma:*header-stream* *standard-output*), Я потерян, когда дело доходит до получения заголовков в удобной форме.

Изменить: Чтобы получить URL перенаправления " http://lisp.org/":

(nth-value 3 (drakma:http-request "http://lisp.org/"))
Result: #<PURI:URI http://lisp.org/index.html>

1 ответ

Решение

Функции, возвращающие несколько значений в Common Lisp, требуют специального синтаксиса для доступа к значениям, выходящим за пределы первого; это удобный метод, позволяющий простому вызову функции тривиально возвратить "наиболее очевидную вещь", с одной стороны, а также предоставить дополнительную информацию для использования вызывающим абонентам, которые в этом нуждаются, с другой.

Alist заголовка, в случае HTTP-REQUEST, это третье возвращаемое значение, и к нему можно получить доступ таким образом:

CL-USER> (nth-value 2 (drakma:http-request "http://lisp.org"))
((:DATE . "Tue, 26 Nov 2013 16:00:41 GMT") (:CONNECTION . "Close")
 (:SERVER . "AllegroServe/1.2.65") (:CONTENT-TYPE . "text/html")
 (:CONTENT-LENGTH . "459") (:LAST-MODIFIED . "Wed, 26 Oct 2011 02:26:26 GMT"))

Для деталей NTH-VALUE и другие конструкции, задействованные в обработке нескольких значений, см. раздел 7.10.1 Common Lisp, Language.

Другие вопросы по тегам