如何在Emacs Lisp中进行基本认证?

3
我正在尝试使用基本身份验证来认证 API。 似乎下面的代码应该可以工作,但是当我在 scratch 缓冲区中使用 C-x C-e 运行它后,它会崩溃(显示:debugger entered--Lisp error: (wrong-type-argument characterp))。
以下是我的代码。 如果有人知道我需要更改什么才能使其正常工作,请告诉我! 在线上几乎找不到完整的 Emacs Lisp 基本身份验证示例,因此这将是一个巨大的帮助。
(setq ztoken "areallyfaketokenrandomtokenwithfakechars")
(setq zsite "https://fake.zendesk.com/api/v2/users/1100000011/related.json")

(let ((url-request-method "GET")
  (url-request-extra-headers '(("Content Type" . "application/json")
   ("Authorization" . ,(concat "Basic "
(base64-encode-string
   (concat "joe@fake.com/token" ":" ztoken)))))))    
(condition-case nil
    (url-retrieve-synchronously
     (format zsite))))

1
如果我们把单引号改成反引号,怎么样?这样列表内的内容就可以被评估,而不是被字面解释。此外,如果你有类似于(setq debug-on-error t)这样的代码,你可以得到更有帮助的调试信息。 - lawlist
谢谢,我已经更改了。现在它会提示我输入用户名/密码,这肯定推进了进展。 - jumar
1个回答

1
正如lawlist所提到的,您的代码使用单引号而不是反引号。以下是一种替代方法,它不使用反引号/逗号。有关反引号的更多信息,请参见:https://www.gnu.org/software/emacs/manual/html_node/elisp/Backquote.html#Backquote
(let* ((url-request-method "GET")
       (base64 (concat "Basic "
               (base64-encode-string
            (concat "joe@fake.com/token" ":" ztoken))))
       (url-request-extra-headers (list (cons "Content Type" "application/json")
                    (cons "Authorization" base64))))    
  (condition-case nil
      (url-retrieve-synchronously
       (format zsite))))

请修改您的回答,说明原帖作者遇到的问题是他使用了单引号而不是反引号,并澄清您的回答是一种不使用反引号/逗号的替代方法。请参阅Emacs手册中与使用反引号相关的部分:https://www.gnu.org/software/emacs/manual/html_node/elisp/Backquote.html#Backquote - lawlist
@lawlist答案已修正 - V. Semeria
谢谢!这个很接近成功了,但是我仍然被要求输入用户名和密码(尽管我知道我已经正确定义并按照代码摘录中的格式进行了设置)。我注意到在下面的链接中,他们提出了一个类似的解决方案,但我遇到了同样的问题 - 尽管我提交了用户名/密码,但仍然被要求输入。https://dev59.com/sEnSa4cB1Zd3GeqPR-Wy想知道是否有办法可以抑制用户名/密码提示,并从我提交的头部获取它们。 - jumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接