• Stars
    star
    625
  • Rank 71,862 (Top 2 %)
  • Language
    Emacs Lisp
  • License
    GNU General Publi...
  • Created almost 12 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Request.el -- Easy HTTP request for Emacs Lisp

Build Status MELPA Badge MELPA Stable Badge

request.el -- an elisp HTTP library

Uses curl as its backend or Emacs's native url.el library if curl is not found.

The default encoding for requests is utf-8. Please explicitly specify :encoding 'binary for binary data.

Install

As described in Getting started, ensure melpa's whereabouts in init.el or .emacs:

(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))

Then

M-x package-refresh-contents RET
M-x package-install RET request RET

Alternatively, directly clone this repo and make install.

Examples

GET:

(request "http://httpbin.org/get"
  :params '(("key" . "value") ("key2" . "value2"))
  :parser 'json-read
  :success (cl-function
            (lambda (&key data &allow-other-keys)
              (message "I sent: %S" (assoc-default 'args data)))))

POST:

(request "http://httpbin.org/post"
  :type "POST"
  :data '(("key" . "value") ("key2" . "value2"))
  ;; :data "key=value&key2=value2"  ;; this is equivalent
  :parser 'json-read
  :success (cl-function
            (lambda (&key data &allow-other-keys)
              (message "I sent: %S" (assoc-default 'form data)))))

Block until completion:

(request "http://httpbin.org/get"
  :sync t
  :complete (cl-function
             (lambda (&key response &allow-other-keys)
               (message "Done: %s" (request-response-status-code response)))))

Curl authentication:

(request "http://httpbin.org/get"
  :auth "digest" ;; or "basic", "anyauth", etc., which see curl(1)
  :complete (cl-function
             (lambda (&key response &allow-other-keys)
               (message "Done: %s" (request-response-status-code response)))))

Request binary data:

(request "http://httpbin.org/get"
  :encoding 'binary
  :complete (cl-function
             (lambda (&key response &allow-other-keys)
               (message "Done: %s" (request-response-status-code response)))))

POST file (WARNING: it will send the contents of the current buffer!):

(request "http://httpbin.org/post"
  :type "POST"
  :files `(("current buffer" . ,(current-buffer)))
  :parser 'json-read
  :success (cl-function
            (lambda (&key data &allow-other-keys)
              (message "I sent: %S" (assoc-default 'files data)))))

Rich callback dispatch (like jQuery.ajax):

(request "http://httpbin.org/status/418"
  ;; "http://httpbin.org/status/200"  ;; success callback will be called.
  ;; "http://httpbin.org/status/400"  ;; you will see "Got 400."
  :parser 'buffer-string
  :success
  (cl-function (lambda (&key data &allow-other-keys)
                 (when data
                   (with-current-buffer (get-buffer-create "*request demo*")
                     (erase-buffer)
                     (insert data)
                     (pop-to-buffer (current-buffer))))))
  :error
  (cl-function (lambda (&rest args &key error-thrown &allow-other-keys)
                 (message "Got error: %S" error-thrown)))
  :complete (lambda (&rest _) (message "Finished!"))
  :status-code '((400 . (lambda (&rest _) (message "Got 400.")))
                 (418 . (lambda (&rest _) (message "Got 418.")))))

Flexible PARSER option:

(request "https://github.com/tkf/emacs-request/commits/master.atom"
  ;; Parse XML in response body:
  :parser (lambda () (libxml-parse-xml-region (point) (point-max)))
  :success (cl-function
            (lambda (&key data &allow-other-keys)
              ;; Just don't look at this function....
              (let ((get (lambda (node &rest names)
                           (if names
                               (apply get
                                      (first (xml-get-children
                                              node (car names)))
                                      (cdr names))
                             (first (xml-node-children node))))))
                (message "Latest commit: %s (by %s)"
                         (funcall get data 'entry 'title)
                         (funcall get data 'entry 'author 'name))))))

PUT JSON data:

(request "http://httpbin.org/put"
  :type "PUT"
  :data (json-encode '(("key" . "value") ("key2" . "value2")))
  :headers '(("Content-Type" . "application/json"))
  :parser 'json-read
  :success (cl-function
            (lambda (&key data &allow-other-keys)
              (message "I sent: %S" (assoc-default 'json data)))))

PUT JSON data including non-ascii strings:

(request "http://httpbin.org/put"
  :type "PUT"
  :data (json-encode '(("key" . "値1") ("key2" . "値2")))
  :headers '(("Content-Type" . "application/json"))
  :parser 'json-read
  :encoding 'utf-8
  :success (cl-function
            (lambda (&key data &allow-other-keys)
              (message "I sent: %S" (assoc-default 'json data)))))

Another PUT JSON example (nested JSON using alist structure, how to represent a boolean & how to selectively evaluate lisp):

;; (1) Prepend alist structure with a backtick (`) rather than single quote (')
;;     to allow elisp evaluation of selected elements prefixed with a comma (,)
;; (2) This value is expected as a boolean so use the nil / t elisp alist denotation
;; (3) The function will be evaluated as it has been prefixed with a comma (,)
(request "http://httpbin.org/put"
  :type "PUT"
  :data (json-encode `(("jsonArray" . (("item1" . "value 1") ;; (1)
                                       ("item2" . t)         ;; (2)
                                       ("item3" . ,(your-custom-elisp-function)))))) ;; (3)
  :headers '(("Content-Type" . "application/json"))
  :parser 'json-read
  :success (cl-function
            (lambda (&key data &allow-other-keys)
              (message "I sent: %S" (assoc-default 'json data)))))

GET with Unix domain socket data:

(request "http:/hello.txt"
  :unix-socket "/tmp/app.sock"
  :parser (lambda () (buffer-string))
  :success (cl-function
            (lambda (&key data &allow-other-keys)
              (message "Got: %s" data))))

Legacy documentation

More Repositories

1

emacs-jedi

Python auto-completion for Emacs
Emacs Lisp
655
star
2

emacs-ipython-notebook

IPython notebook client in Emacs
Emacs Lisp
546
star
3

ThreadsX.jl

Parallelized Base functions
Julia
297
star
4

InteractiveCodeSearch.jl

Interactively search Julia code from terminal
Julia
106
star
5

python-epc

EPC (RPC stack for Emacs Lisp) for Python
Python
89
star
6

rash

Rash Advances Shell History
Python
83
star
7

emacs-jedi-direx

Tree style source code viewer for Python buffer
Emacs Lisp
71
star
8

emacs-python-environment

Python virtualenv API for Emacs Lisp
Emacs Lisp
59
star
9

BenchmarkCI.jl

Julia
52
star
10

org-mode

Emacs Lisp
41
star
11

ipython-hierarchymagic

`%hierarchy` and `%%dot` magics for IPython
Python
40
star
12

Kaleido.jl

Some useful lenses
Julia
33
star
13

ShowCode.jl

A tool for exploring and visualizing Julia code
Julia
24
star
14

Mutabilities.jl

Julia
24
star
15

Try.jl

Zero-overhead and debuggable error handling
Julia
22
star
16

inkscape-export-layers

Export selected layers from Inkscape SVG.
Python
21
star
17

DisplayAs.jl

Julia
19
star
18

Baselet.jl

Base API optimized for tuples
Julia
18
star
19

Run.jl

Julia
17
star
20

ne2wm

E2WM superpack
Emacs Lisp
14
star
21

PublicAPI.jl

PublicAPI.jl provides a simple API for declaring API without exporting the names
Julia
12
star
22

orgviz

Browser based app to view org-mode files from different directions -- calendar / table / histogram / time line
Python
12
star
23

Referenceables.jl

Julia
12
star
24

Terminators.jl

Julia
11
star
25

JuliaCLI.jl

Julia
11
star
26

LyapunovExponents.jl

A hackable Lyapunov exponents calculator
Julia
10
star
27

ipython-sqlitemagic

SQLite magics for IPython
Python
10
star
28

DocumentationOverview.jl

Julia
10
star
29

TaskDAGAnalyzers.jl

Julia
10
star
30

ContextVariablesX.jl

Julia
10
star
31

UnderscoreOh.jl

call graphs as recompilation-free capture-by-value closures
Julia
9
star
32

auto-complete-rst

Auto-complete extension for ReST and Sphinx
Python
9
star
33

conda-julia

Conda recipes for JuliaLang and its packages
Shell
9
star
34

JuliaManager.jl

System image manager for Julia
Python
8
star
35

Restacker.jl

Put immutables back in the stack
Julia
8
star
36

PyBase.jl

Python
8
star
37

matplotlibrc-zenburn

8
star
38

IPython.jl

Run IPython inside Julia to exchange data interactively
Python
8
star
39

ColorfulCodeGen.jl

Syntax-highlighted version of @code_llvm etc.
Julia
7
star
40

git-blackhole

Continuous backup and recoverable trash can for Git
Python
6
star
41

fillplots

Library to plot regions and boundaries given inequalities
Python
6
star
42

Restarts.jl

Julia
6
star
43

ipython-doctestmagic

Run and debug doctest in IPython
Python
6
star
44

auto-complete-chunk

Auto-completion for dot.separated.words.
Emacs Lisp
6
star
45

Awaits.jl

[WIP] Structured concurrency for parallel computing
Julia
6
star
46

InteractiveFormatter.jl

Julia
6
star
47

PyVenvs.jl

Julian interface for Pythonic virtual environments
Julia
6
star
48

Schedulers.jl

Multi-scheduler for/in Julia
Julia
5
star
49

mplchaco

Matplotlib to Chaco converter
Python
5
star
50

balance-tutorial-ja

Python
5
star
51

VegaStreams.jl

"Real-time" plotting with VegaLite.jl and ElectronDisplay.jl
Julia
5
star
52

IndirectImports.jl

Import and extend packages without importing them
Julia
5
star
53

sphinx-eldomain

Emacs Lisp domain -- Sphinx extension for Emacs Lisp
Python
5
star
54

JuliaProjectFormatter.jl

Julia
5
star
55

ThreadedArrays.jl

"Easy" parallelism injection
Julia
5
star
56

railgun

ctypes utilities for faster and easier simulation programming in C and Python
Python
4
star
57

ipython-importfilemagic

Python
4
star
58

julia-code-style-suggesters

4
star
59

ShowGraphviz.jl

Julia
4
star
60

Recalls.jl

Julia
4
star
61

BroadcastableStructs.jl

Julia
4
star
62

SparseXX.jl

Sparse arrays with eXperimental eXtensions
Julia
4
star
63

ipython-tempmagic

Python
4
star
64

julia-python-snippets

Julia
4
star
65

MIMEFileExtensions.jl

Julia
4
star
66

ConsoleProgressMonitor.jl

Julia
4
star
67

uniquify

Python
4
star
68

ExternalDocstrings.jl

Julia
4
star
69

Tofu.jl

◻◻◻
Julia
3
star
70

zeroein

zeoroein is merged to EIN
Python
3
star
71

ParallelIncrements.jl

Julia
3
star
72

emacs-plugin-template

Minimal emacs plug-in template with setup for Travis CI
Emacs Lisp
3
star
73

TmuxDisplays.jl

Julia
3
star
74

NDReducibles.jl

Julia
3
star
75

GroundEffects.jl

Julia
3
star
76

emacs-pythonista

Preconfigured Python modes for Pythonista
Emacs Lisp
3
star
77

Reconstructables.jl

Tools for easy "modification" of nested immutable structs
Julia
3
star
78

ipyjulia_hacks

🐒 Horrible hacks 🐍
Python
3
star
79

traitscli

CLI generator for Python based on class traits
Python
3
star
80

rstcheck

reStructuredText checker
Python
3
star
81

emacs-pinot-search

Use pinot desktop meta search engine via Emacs anything/helm interface
Emacs Lisp
3
star
82

AtBackslash.jl

Julia
3
star
83

ContextManagers.jl

Julia
3
star
84

Kwonly.jl

Macro to generate keyword-only version of a function
Julia
3
star
85

julia-venv

Virtual Julia environments for PyJulia
Python
3
star
86

cheat_sheet

my cheat sheet
2
star
87

reflected-buffers

Indirect buffer-like feature, but without sharing text properties such as font lock.
Emacs Lisp
2
star
88

ChainCutters.jl

Julia
2
star
89

InferableTasks.jl

Julia
2
star
90

mybin

my scripts
Shell
2
star
91

emacs-codethumb

Emacs Lisp
2
star
92

dotfiles

linux dotfiles
Emacs Lisp
2
star
93

websocket-el-pre

Emacs Lisp
2
star
94

BenchmarkConfigSweeps.jl

Julia
2
star
95

PyPreferences.jl

Julia
2
star
96

emacs-deferred-flyspell

Emacs Lisp
2
star
97

EventTracker.jl

Julia
2
star
98

UnsafeFields.jl

Julia
2
star
99

bvcs

Batched VCS command runner
Python
2
star
100

BenchSweeps.jl

Julia
2
star