我有一个使用Drakma获取网页的函数:
(defun scrape ()
(let ((cookie-jar (make-instance 'drakma:cookie-jar)))
(drakma:http-request "http://www.example.com/account/login"
:method :post
:parameters '(("username" . "myusername")
("password" . "mypassword"))
:cookie-jar cookie-jar)
(setq body (drakma:http-request "http://www.example.com/"
:cookie-jar cookie-jar))
(format t body)))这正如我所期望的那样工作。但是,如果我将用户名和密码参数化,如下所示:
(defun scrape (username password)
(let ((cookie-jar (make-instance 'drakma:cookie-jar)))
(drakma:http-request "http://www.example.com/account/login"
:method :post
:parameters '(("username" . username)
("password" . password))
:cookie-jar cookie-jar)
(setq body (drakma:http-request "http://www.example.com/"
:cookie-jar cookie-jar))
(format t body)))..。并像这样调用它:
(scrape "my_username" "my_password")..。然后我得到以下错误:
*** - Don't know what to do with name/value pair ("username" . USERNAME) in multipart/form-data body.我是Lisp的新手,所以我百分之百确定我在这里遗漏了一些非常简单的参数。例如,如果我将一个对格式的调用添加到抓取函数中,我可以看到用户名是正确传递的。
发布于 2011-01-03 11:13:45
drakma:http-request的parameters参数被加了引号,所以它不会得到您在列表中传递的字符串,它会得到符号USERNAME和PASSWORD。你需要以这样一种方式构建列表,即它包含参数变量在其求值的上下文中,例如(list (cons "username" username) (cons "password" password))。
https://stackoverflow.com/questions/4581601
复制相似问题