답변:
restclient 는 가장 "대화식"모드입니다.
이는 HTTP REST 웹 서비스를 수동으로 탐색하고 테스트하는 도구입니다. 일반 텍스트 쿼리 시트에서 쿼리를 실행하고 결과를 예쁘게 인쇄 된 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")
오래된 질문입니다.하지만 Google이 누구든지 이것을 할 경우 다른 옵션은 Org Babel 및 ob-http
...을 사용하는 것입니다 ( melpa 에서 설치할 수 있음) .)
을 사용하면 " "코드 블록이 포함 org-babel
된 .org
파일을 만들 수 있습니다 http
. 이러한 블록이 평가되면 HTTP 요청을 만들고 응답을 결과로 반환합니다.
이러한 블록에 " #+NAME:
"속성이있는 경우 다른 org-babel
블록 에서 결과를 사용할 수 있습니다 . 이것은 HTTP 요청의 결과를 사용하여 아주 깔끔한 문맹 프로그래밍을 가능하게합니다.
예를 들어, 다음은 HTTP 요청을 작성하고 반환 된 JSON을 Ruby로 구문 분석하는 방법을 보여주는 작은 조직 문서입니다.
* 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 one)에 타격 을 가하면 자동으로 상위 :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을 작성했습니다. http 요청을 실행할 수있는 comint 기반 repl을 제공합니다.
https://github.com/gregsexton/httprepl.el
요청 결과를 소비하는 기능을 쉽게 추가 할 수 있습니다. 이들은 일반적으로 예쁜 인쇄 등에 사용되지만 내장 json 라이브러리를 사용하여 elisp 구조로 구문 분석하는 것이 간단해야합니다.
나는 거의 똑같은 일을 직접하기 때문에 완벽하게 할 수 있습니다. 그래도 몇 가지 경고가 있습니다. 우선 로컬 패치 xmlrpc.el 라이브러리가 있습니다. 있습니다. 이것은 현대 이맥스와의 비 호환성과 요청에서 인증 헤더를 전달하는 능력이라는 두 가지 문제를 해결합니다. 처리중인 데이터는 XML의 JSON이지만 설정에 따라 XML 단계를 건너 뛸 수 있습니다.
모든 무거운 RPC 리프팅은 lava-rpc.el 에서 수행 되지만 따라 가기 어렵지 않아야합니다. 여기서 문자열 화 된 json 조각을 제출하라는 호출을 볼 수 있습니다 .