尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

request.el登录与保持登录:auth-source认证与Cookie管理完全教程

request.el登录与保持登录:auth-source认证与Cookie管理完全教程 request.el登录与保持登录auth-source认证与Cookie管理完全教程【免费下载链接】emacs-requestRequest.el -- Easy HTTP request for Emacs Lisp项目地址: https://gitcode.com/gh_mirrors/em/emacs-requestrequest.el 是 Emacs 中最流行的轻量级 HTTP 请求库Request.el -- Easy HTTP request for Emacs Lisp只需几行 Lisp 就能向任意 API 发起 GET/POST 请求。本文带你掌握它的两大登录能力用auth-source 认证自动注入账号密码用Cookie 管理实现一次登录、长期保持登录状态。读完这篇指南你将彻底告别在代码里硬编码密码的坏习惯。1️⃣ 为什么 request.el 需要登录能力用 request.el 写 Emacs 插件时你迟早会碰到两类场景需要鉴权的 API私有 Git 仓库、企业接口、需要 Basic/Digest 认证的服务器登录后保持会话网站登录后颁发 Cookie后续请求自动携带 Cookie 就能保持登录。request.el 恰好内置了完整方案认证走 Emacs 官方的auth-source凭据系统会话走独立的 Cookie JarCookie 罐文件。request.el 请求流程示意注request.el主入口函数request的完整参数说明见 request.el异步链式调用可搭配 request-deferred.el。2️⃣ 一键安装步骤如果还没有 request.el一条命令即可获取也可通过package.el安装git clone https://gitcode.com/gh_mirrors/em/emacs-request ~/.emacs.d/emacs-request然后把路径加入你的load-path并加载即可。验证是否可用(request https://httpbin.org/get :parser json-read)看到返回的 JSON 说明安装成功 ✅。3️⃣ 认证第一站auth-source 认证是什么request.el 不让你手写密码而是复用 Emacs 内置的auth-source库见 request.el 顶部的(require auth-source)。它的工作方式发起请求时request.el 按**主机名host**去 auth-source 仓库里查凭据查不到时弹窗提示输入用户名和密码:create t输入后凭据被自动保存下次同一主机直接免密通过。凭据默认存在~/.auth-info文件中支持多种后端后端说明auth-info默认存在~/.auth-info密码可加密存储GNOME Keyring / Secret Service调用系统钥匙串password-store用 gpg 加密的密码文件小建议在~/.auth-info中给条目加:do-not-encrypt t之外的默认配置即可让密码加密保存避免明文泄露。4️⃣ 发起认证请求:auth 参数用法request.el 的 curl 后端支持:auth参数认证方式与curl(1)一致basic、digest、anyauth等示例见 README.rst(request https://example.com/api/data :auth basic ;; 自动从 auth-source 取账号密码 :parser json-read :success (lambda (key data allow-other-keys) (message 拿到了: %S data)))内部实现上request.el 会调用auth-source-search :host 主机 :require (:user :secret) :create t把结果拼成--user 用户名:密码传给 curl实现见 request.el 的request--curl-command-args。⚠️注意密码在日志中会被打码显示为elided相关回归测试可参考 tests/test-request.el 中的request-auth用例。5️⃣ 保持登录Cookie 罐Cookie Jar机制这是 request.el 最省心的设计——Cookie 管理全自动每次 curl 请求都带上--cookie 罐文件 --cookie-jar 罐文件服务器Set-Cookie下发的登录态会被自动写入罐文件下次请求同域时自动读取并携带会话就一直保持登录。 罐文件默认位置~/.emacs/request/curl-cookie-jar由 request.el 中的request-storage-directory默认为user-emacs-directory下的request子目录和request--curl-cookie-jar决定。文件格式是标准的Netscape Cookie文本格式每行一个 Cookie域名、路径、Secure 标记、过期时间、名称、值。5.1 在代码里读取 Cookie 值如果需要在插件中判断当前是否已登录request.el 提供两个读取函数;; 返回 alist如 ((. . session) (key . value)) (request-cookie-alist example.com /) ;; 返回 document.cookie 风格字符串如 keyvalue; key2value2 (request-cookie-string example.com /)判断某登录态 Cookie 是否存在即可得知会话是否还有效失效后重新走第 4 节的认证流程即可。5.2 手动管理 Cookie因为罐文件是纯文本你可以直接用文本编辑器打开~/.emacs/request/curl-cookie-jar查看/删除某条 Cookie删除后相当于退出登录解析与过滤逻辑见 request.el 的request--netscape-cookie-parse/request--netscape-filter-cookies它支持#HttpOnly_前缀的 HttpOnly Cookie。6️⃣ 常见问题排查清单弹密码框但认证仍 401检查:auth类型是否与服务端匹配basic与digest不通吃可用anyauth让 curl 自动协商登录态突然失效查看罐文件中对应 Cookie 的过期时间列或服务器端会话过期删除旧 Cookie 重新登录即可同时发多个请求源码中明确提示并行请求是 Cookie 罐损坏的已知诱因见request--curl-command-args文档敏感操作建议串行发起想换后端request-backend可在curl与 Emacs 原生url-retrieve间切换但:auth认证与 FILES 上传目前仅 curl 后端支持。7️⃣ 总结需求request.el 方案关键入口保存/复用账号密码auth-source 认证:auth basic参数一次登录、长期会话自动 Cookie 罐~/.emacs/request/curl-cookie-jar程序化读取登录态Cookie 查询函数request-cookie-alist/request-cookie-string掌握auth-source 认证Cookie 管理这两板斧你的 Emacs 插件就能安全地登录任意需要鉴权的网站与 API并保持稳定的会话状态。更多实战用例见 tests/test-request.el 中的request-auth与request-session-cookie测试。【免费下载链接】emacs-requestRequest.el -- Easy HTTP request for Emacs Lisp项目地址: https://gitcode.com/gh_mirrors/em/emacs-request创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表