我想使用drakma获取HTTP请求的重定向url。如果我传入“http://lisp.org/”,我想要“http://lisp.org/index.html”。查看文档,看起来我希望标题作为列表,drakma:http-request
应该给我一个列表。
该函数返回SEVEN值 - 回复正文(但见下文),状态代码为整数,服务器发送的标题的列表,其中汽车的每个元素(标题的名称)是关键字和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>
答案 0 :(得分:4)
在Common Lisp中返回多个值的函数需要特殊的语法来访问第一个以外的值;这是一种方便的方法,允许简单的函数调用一方面简单地返回“最明显的东西”,另一方面也为需要它的调用者提供额外的信息。
在HTTP-REQUEST
的情况下,标题alist是返回的第三个值,因此可以访问:
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
以及处理多个值所涉及的其他结构的详细信息,请参阅section 7.10.1 of Common Lisp, the Language。