0

我想使用 drakma 获取 HTTP 请求的重定向 url。如果我传入“ http://lisp.org/ ”,我想要返回“ http://lisp.org/index.html ”。查看文档,看起来我希望将标题作为 alist,并且drakma:http-request应该给我一个 alist。

该函数返回七个值 - 回复的正文(但见下文),作为整数的状态代码,服务器发送的标头列表,其中对于每个元素,汽车(标头的名称)是一个关键字和cdr(标头的值)是一个字符串....

当我运行时,drakma:http-request我会收到消息正文,如果我这样做,则会显示标题(setf drakma:*header-stream* *standard-output*)。在以可用形式获取标题时,我迷失了。

编辑:要获得“ http://lisp.org/ ”的重定向网址:

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

1 回答 1

4

Common Lisp 中返回多个值的函数需要特殊语法才能访问第一个值之外的值;这是一种方便的方法,一方面允许简单的函数调用简单地返回“最明显的东西”,另一方面也为需要它的调用者提供额外的信息。

在 的情况下,标头 alistHTTP-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处理多个值所涉及的其他构造的详细信息,请参阅Common Lisp, the Language 的第 7.10.1 节

于 2013-11-26T16:17:34.740 回答