我得到的印象是url.el
大部分是专为交互式操作,也就是你做一个呼叫未经授权,服务器以403“需要授权”响应(正确的代码?)的地位和url.el
将查询用户名用户和密码。
你可以看看我的代码http://github.com/hdurer/fluiddb.el,我尝试以编程方式做事情。
基本上,我自己创建HTTP授权标头(base64编码格式正确的字符串并将正确的标头添加到url-request-extra-headers
)。 然后在第二步中,我需要添加建议到url-http-handle-authentication
,以便它不会要求用户输入的凭证不可接受。
这感觉很像强奸url.el
但它适用于我,并且是我能使它工作的唯一方法。因此
您的代码将是这个样子:
(defvar xyz-user-name "admin")
(defvar xyz-password "admin")
(defvar xyz-block-authorisation nil
"Flag whether to block url.el's usual interactive authorisation procedure")
(defadvice url-http-handle-authentication (around xyz-fix)
(unless xyz-block-authorisation
ad-do-it))
(ad-activate 'url-http-handle-authentication)
(defun login-show-posts()
(interactive)
(let ((xyz-block-authorisation t)
(url-request-method "GET")
(url-request-extra-headers
`(("Content-Type" . "application/xml")
("Authorization" . ,(concat "Basic "
(base64-encode-string
(concat xyz-user-name ":" xyz-password)))))))
(url-retrieve "http://localhost:3000/essay/1.xml"
(lambda (status)
(switch-to-buffer (current-buffer))
))))
感谢您的评论。我已经阅读了twit.el,twitter.el和mediawiki.el的资源,但是我还没有弄清楚他们正在做什么以进行身份验证。我也会检查你的。再次感谢! – wallyqs 2009-10-22 17:49:38
一个完全不同的解决方案可能是不使用url.el - 我只看了一下identica模式(就是google的模式),那里的HTTP请求是完全手动组装的。对我来说,这感觉有点像重新发明轮子。 – 2009-10-22 20:28:28
我使用的twiter模式(twit.el)不会以编程方式进行身份验证,而是依赖于url.el - 即用户会在第一次请求时询问twitter的名称和密码。 – 2009-10-22 20:30:08