rest - 额外的 header 未通过 url.el 发送

标签 rest emacs curl lisp elisp

以下是我的 elisp 代码(凭据显然是假的):

(defvar assembla-username  "foo")                                                                                                                                                                             
(defvar assembla-password  "bar")                                                                                                                                                                           
(defvar tickets-url "http://www.assembla.com/spaces/aWx7Oas2352cwqjQWU/tickets/")                                                                                                                       

(defvar assembla-auth-header (concat "Basic " (base64-encode-string (concat assembla-username ":" assembla-password))))                                                                                              

; curl -H "Accept: application/xml" -u "foo:bar" http://www.assembla.com/spaces/aWx7Oas2352cwqjQWU/tickets/                                                                                      
(defun get-tickets()                                                                                                                                                                                            
  (interactive)                                                                                                                                                                                                      
  (let ((url-request-extra-headers                                                                                                                                                                                   
         '(("Accept" . "application/xml")                                                                                                                                                                            
           ("Authorization" . assembla-auth-header)))))                                                                                                                                                                                
  (url-retrieve tickets-url (lambda (status)                                                                                                                                                                
                                       (switch-to-buffer (current-buffer)))))

根据监视传出请求 header ,未设置“Accept” header 。我很确定这就是将我重定向到登录页面的原因,因为注释掉的curl请求完美地工作并且确实设置了Accept header 。

话虽这么说,我是否做错了什么,和/或是否有更好的包装器可以在 elisp 中进行大量 REST 调用?

谢谢!

最佳答案

您没有评估您的 assembla-auth-header 变量,并且您在 let 外部调用 url-retrieve,此时 url-request-headers 已恢复到原始状态。您似乎还需要使用 url-mime-accept-string 而不是将其添加到额外的 header 中。

(defun get-tickets()
  (interactive)
  (let ((url-mime-accept-string "application/xml")
        (url-request-extra-headers
         `(("Authorization" . ,assembla-auth-header))))
    (url-retrieve tickets-url (lambda (status)
                                (switch-to-buffer (current-buffer))))))

我建议尝试类似的操作,看看是否至少正确地传递了 AcceptAuthorization header 。

关于rest - 额外的 header 未通过 url.el 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622837/

相关文章:

curl - jruby 的遏制( curl )?

wcf - 在 .NET 4 中使用 JSON.NET 和 RESTful WCF 服务

rest - 无法使用图形 api 列出具有管理员凭据的 Office 365 域中的用户

c - 是否可以使用 C 为 GNU Emacs 编写自定义原语?

emacs - orgmode 日志抽屉总时间未按预期计算

php - 用于在 PHP 中跟踪货件的 USPS API

sockets - curl “Couldn' t连接到服务器”

java - 是否可以从响应对象中提取方法名称?

Android 每 2 小时以编程方式将 GPS 发送到 MySql 数据库

emacs - 以编程方式获取和设置 emacs 缓冲区中的行内容