Emacs轻量级HTTP库 基于Curl简单高效
plz.el是一个基于Curl的Emacs HTTP库,支持同步和 异步请求。其API设计简洁自然,代码结构清晰,功能经过充分测试。plz.el提供请求队列管理,支持多种响应处理方式,包括JSON解析和二进制数据处理。作为轻量级HTTP客户端库,plz.el适用于开发各类Emacs网络应用。
[[http://elpa.gnu.org/packages/plz.html][file:http://elpa.gnu.org/packages/plz.svg]]
#+HTML: <img src="https://yellow-cdn.veclightyear.com/835a84d5/3ac9e63d-7987-4135-9361-211a4caa0d16.png" align="right">
plz是一个Emacs的HTTP库。它使用curl作为后端,避免了使用Emacs内置url库的一些问题。它支持同步和异步请求。其API旨在简单、自然且富有表现力。其代码旨在简洁且组织良好。每个功能都经过[[https://httpbin.org/][httpbin]]的测试。
** GNU ELPA
plz可在[[http://elpa.gnu.org/packages/plz.html][GNU ELPA]]中获取。可以在Emacs中使用package-install命令安装。
** 手动安装
plz除了Emacs和curl外没有其他依赖。它已知可在Emacs 26.3或更高版本上运行。要手动安装,只需将=plz.el=放入您的load-path中,然后执行~(require 'plz)~。
主要的公共函数是plz,它发送HTTP请求并返回指定类型的结果(对于同步请求),或curl进程对象(对于异步请求)。对于异步请求,可以指定回调函数、错误处理函数和终结器函数,以及各种其他选项。
** 示例
同步GET一个URL并将响应体作为解码后的字符串返回(这里是原始JSON):
#+BEGIN_SRC elisp :exports both :results value code :cache yes (plz 'get "https://httpbin.org/user-agent") #+END_SRC
#+RESULTS[47fef7e4780e9fac6c99d7661c29de580bf0fa14]: #+begin_src elisp "{\n "user-agent": "curl/7.35.0"\n}\n" #+end_src
同步GET一个返回JSON对象的URL,并将其解析并作为关联列表返回:
#+BEGIN_SRC elisp :exports both :results value code :cache yes (plz 'get "https://httpbin.org/get" :as #'json-read) #+END_SRC
#+RESULTS[a117174ba62b2be3ea3f23e5c43662047b81bccf]: #+begin_src elisp ((args) (headers (Accept . "/") (Accept-Encoding . "deflate, gzip") (Host . "httpbin.org") (User-Agent . "curl/7.35.0")) (url . "https://httpbin.org/get")) #+end_src
异步POST一个JSON对象在请求体中,然后从响应体中解析JSON对象,并用结果调用一个函数:
#+BEGIN_SRC elisp :exports both :cache yes (plz 'post "https://httpbin.org/post" :headers '(("Content-Type" . "application/json")) :body (json-encode '(("key" . "value"))) :as #'json-read :then (lambda (alist) (message "Result: %s" (alist-get 'data alist)))) #+END_SRC
#+RESULTS[3f4fdd16c4980bf36c3930e91f69cc379cca4a35]: : Result: {"key":"value"}
同步下载一个JPEG文件,然后从数据创建一个Emacs图像对象:
#+BEGIN_SRC elisp :exports both :cache yes (let ((jpeg-data (plz 'get "https://httpbin.org/image/jpeg" :as 'binary))) (create-image jpeg-data nil 'data)) #+END_SRC
#+RESULTS[fbe8a6c8cb097ac08e992ea90bdbd50e7337a385]: : (image :type jpeg :data ""ÿØÿà^@^PJFIF...")
** 函数
plz :: /(method url &key headers body else finally noquery (as 'string) (then 'sync) (body-type 'text) (decode t decode-s) (connect-timeout plz-connect-timeout) (timeout plz-timeout))/
使用curl请求URL的METHOD。返回curl进程对象,或对于同步请求,返回选定的结果。
HEADERS可以是一个与请求一起发送的额外头部的关联列表。
BODY可以是一个字符串、一个缓冲区,或者像~(file FILENAME)~这样的列表,用于从磁盘上传文件。
BODY-TYPE可以是text以文本形式发送BODY,或binary以二进制形式发送。
AS选择要传递给回调函数THEN的结果类型,或同步请求要返回的结果类型。它可以是:
如果DECODE为非nil,响应体会自动解码。对于二进制内容,它应该为nil。当AS为binary时,DECODE自动设置为nil。
THEN是一个回调函数,其唯一参数由上面的AS选择;如果请求失败且未给出ELSE函数(见下文),参数将是描述错误的plz-error结构。或者THEN可以是sync以进行同步请求,在这种情况下,结果直接从这个函数返回。
ELSE是一个可选的回调函数,在请求失败时调用(即如果curl失败,或者如果HTTP响应有非2xx状态码)。它以一个plz-error结构作为参数调用。如果ELSE为nil,当请求失败时会发出plz-curl-error或plz-http-error信号,并带有plz-error结构作为错误数据。对于同步请求,此参数被忽略。
注意:在plz的v0.8版本中,只会发出一个错误信号:plz-error。现有的错误,plz-curl-error和plz-http-error,继承自plz-error,以允许应用程序在使用v0.7时更新其代码(即任何condition-case形式现在应该只处理plz-error,而不是其他两个)。
FINALLY是一个可选函数,在THEN或ELSE之后适当调用,不带参数。对于同步请求,此参数被忽略。
CONNECT-TIMEOUT和TIMEOUT是限制连接到主机和从主机接收响应所需时间的秒数。
NOQUERY传递给make-process,请参见该函数。
FILTER 是一个可选函数,用作 curl 进程的过滤器。它可以用于以流式方式处理 HTTP 响应。该函数必须接受两个参数:运行 curl 的进程对象,以及从进程接收到的输出字符串。默认的进程过滤器将进程的输出插入到进程缓冲区中。提供的 FILTER 函数至少应将输出插入到进程缓冲区中直到 HTTP 正文部分。
** 队列
plz 提供了一个简单的系统来队列 HTTP 请求。首先,通过调用 make-plz-queue 创建一个 plz-queue 结构体。然后用该结构体作为第一个参数调用 plz-queue,其余参数与传递给 plz 的参数相同。最后调用 plz-run 来运行队列中的请求。
所有与队列相关的函数都返回队列作为它们的值,使其易于使用。例如:
#+begin_src elisp :exports code (defvar my-queue (make-plz-queue :limit 2))
(plz-run (plz-queue my-queue 'get "https://httpbin.org/get?foo=0" :then (lambda (body) (message "%s" body)))) #+end_src
或者:
#+begin_src elisp :exports code (let ((queue (make-plz-queue :limit 2 :finally (lambda () (message "队列为空。")))) (urls '("https://httpbin.org/get?foo=0" "https://httpbin.org/get?foo=1"))) (plz-run (dolist (url urls queue) (plz-queue queue 'get url :then (lambda (body) (message "%s" body)))))) #+end_src
你也可以用 plz-clear 清空队列,它会取消任何活动或排队的请求并调用它们的 :else 函数。plz-length 返回队列中活动和排队请求的数量。
** 提示
** 0.10-pre
暂无新内容。
** 0.9.1
修复
** 0.9
兼容性
新增
更改
修复
开发
** 0.8
新增
** 0.7.3
修复
** 0.7.2
修复
** 0.7.1
修复
** 0.7
更改
定义了一个新的错误信号 plz-error。现有的信号 plz-curl-error 和 plz-http-error 继承自它,因此处理 plz-error 可以捕获这两种错误。
注意: 现有的信号 plz-curl-error 和 plz-http-error 在此被废弃,它们将在 v0.8 中移除。应用程序应在使用 v0.7 时更新,只期望 plz-error。
修复
内部
** 0.6
新增
修复
** 0.5.4 修复
** 0.5.3
修复
** 0.5.2
修复
** 0.5.1
修复
** 0.5
新增
** 0.4
新增
变更
修复
内部
** 0.3
新增
修复
** 0.2.1
修复
** 0.2
新增
** 0.1
初始发布。
错误报告、功能请求、建议 — 真是太好了!
请注意,plz 是一个年轻的库,目前它唯一的客户端是 [[https://github.com/alphapapa/ement.el][Ement.el]]。有许多 HTTP 和 curl 功能它还不支持,因为作者还没有需要它们。欢迎提交补丁,只要它们包含通过的测试。
** 版权转让
这个包是 [[https://www.gnu.org/software/emacs/][GNU Emacs]] 的一部分,在 [[https://elpa.gnu.org/][GNU ELPA]] 中分发。对这个项目的贡献必须遵循 GNU 的指导原则,这意味着,与 Emacs 的其他部分一样,超过几行的补丁必须附带将贡献的版权转让给 FSF。希望这样做的贡献者可以联系 [[mailto:emacs-devel@gnu.org][emacs-devel@gnu.org]] 请求转让表格。
GPLv3
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号