Answers:
restclient是最“交互”的模式。
这是一个手动浏览和测试HTTP REST Web服务的工具。从纯文本查询表运行查询,将结果显示为打印精美的XML,JSON甚至图像。
您可以在http://jakemccrary.com/blog/2014/07/04/using-emacs-to-explore-an-http-api/查看工作流程示例。
request.el -HTTP瑞士刀。
(request
"http://httpbin.org/get"
:params '(("key" . "value") ("key2" . "value2"))
:parser 'json-read
:success (function*
(lambda (&key data &allow-other-keys)
(message "I sent: %S" (assoc-default 'args data)))))
emacs-web- “想法是始终使用回调来收集响应。”
JSON回调表单仅允许收集数据:
;; -*- lexical-binding: t -*-
(require 'web)
(web-json-post
(lambda (data &rest stuff)
(message "%S" data))
:url "https://httpbin.org/post")
老问题,是的……但是如果有人用谷歌搜索这个,另一个选择是使用Org Babel和ob-http
...(可以从melpa安装。)
使用org-babel
,您可以制作一个.org
包含“ http
”代码块的文件。当评估这些块时,它们将发出HTTP请求并返回响应作为结果。
如果这些块具有“ #+NAME:
”属性,则可以在其他任何org-babel
块中使用它们的结果。这样就可以使用HTTP请求的结果进行一些简洁明了的编程。
例如,以下是一个Org小文档,它演示了发出HTTP请求并在Ruby中解析返回的JSON:
* The request
The following is the example request shown on [[https://github.com/zweifisch/ob-http][ob-http's Github page]]...
It isn't anything fancy, but it is a REST API request, and returns
JSON, so it works for the sake of this demonstration:
#+NAME:ob-languages
#+BEGIN_SRC http :pretty
GET https://api.github.com/repos/zweifisch/ob-http/languages
#+END_SRC
#+RESULTS:
: {
: "Emacs Lisp": 7034
: }
Notice how this has a "=#+NAME:=" attribute? This is a name we can use
in other =org-babel= blocks. (As you will see below)
* Using the request
Now that I have an =http= request in an org block with a name... Lets
write something in a completely different language and use our HTTP
request's response:
#+BEGIN_SRC ruby :var langs=ob-languages
require 'json'
JSON.parse(langs)['Emacs Lisp']
#+END_SRC
#+RESULTS:
: 7034
The =:var= keyword allowed me to assign the "=langs=" variable in the
Ruby block to the result of the =ob-languages= block [[The request][above]].
This didn't have to be in Ruby, this could have been any language,
including another =http= block.
这是这样的org-mode
:
点击C-c C-c
最下面的代码块(Ruby代码)会自动评估最上面:var
的代码块的依赖关系(这就是代码块标题中的位)。这将意味着http
首先发出请求,然后将结果传递给Ruby进行进一步处理。
您可以使用任意多的块和多种语言来完成此操作。
如果这符合您的需求,则ob-http
在安装后需要进行一些手动调整才能使其正常工作。(不用担心,没有那么多)
安装后ob-http
,您需要自定义两个变量:org-src-lang-modes
和org-babel-load-languages
。
因此,通过运行M-x customize-variable
,您可以自定义每个参数以包括以下内容:
org-src-lang-modes
:您将需要自定义此变量以包括另一种语言映射,因此您可以在列表的末尾插入另一值:
String: http
Symbol: ob-http
然后,您可以C-x C-s
保存该自定义设置。
org-babel-load-languages
:您将要在启用的org
语言列表中再添加一项。“ http
”。
不过,如果该选项不在可能的选项中,则可能需要手动将其添加到列表中,您可以通过单击“状态”并选择“ :
”以显示Lisp表达式来做到这一点...然后您只需添加以下内容最后一个括号之前:
(http . t)
在那之后,快速C-x C-s
并且M-x org-reload
应该是您所需要的..!
我正是出于这个目的编写了httprepl。它为您提供了基于comint的repl,您可以在其中发出http请求。
https://github.com/gregsexton/httprepl.el
您可以轻松添加使用请求结果的函数。这些通常用于漂亮的打印等,但是使用内置的json库解析为elisp结构应该很简单。
完全有可能做,因为我自己几乎做同样的事情。虽然有一些警告。首先,我有一个本地补丁xmlrpc.el 库。这解决了两个问题,即与现代emacs不兼容以及在请求中传递身份验证标头的能力。我正在处理的数据是XML格式的JSON,但您可以根据设置跳过XML步骤。
所有繁重的RPC提升都是在lava-rpc.el中完成的,但并不难遵循。您可以在此处看到提交字符串化json的调用。