首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法传递从命令行参数解析的函数参数

无法传递从命令行参数解析的函数参数
EN

Stack Overflow用户
提问于 2011-01-03 10:01:05
回答 1查看 306关注 0票数 3

我有一个使用Drakma获取网页的函数:

代码语言:javascript
复制
(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)))

这正如我所期望的那样工作。但是,如果我将用户名和密码参数化,如下所示:

代码语言:javascript
复制
(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)))

..。并像这样调用它:

代码语言:javascript
复制
(scrape "my_username" "my_password")

..。然后我得到以下错误:

代码语言:javascript
复制
*** - Don't know what to do with name/value pair ("username" . USERNAME) in multipart/form-data body.

我是Lisp的新手,所以我百分之百确定我在这里遗漏了一些非常简单的参数。例如,如果我将一个对格式的调用添加到抓取函数中,我可以看到用户名是正确传递的。

EN

回答 1

Stack Overflow用户

发布于 2011-01-03 11:13:45

drakma:http-requestparameters参数被加了引号,所以它不会得到您在列表中传递的字符串,它会得到符号USERNAMEPASSWORD。你需要以这样一种方式构建列表,即它包含参数变量在其求值的上下文中,例如(list (cons "username" username) (cons "password" password))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4581601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档