Una alternativa de nivel superior al uso url-http-end-of-headers
, pero igualmente indocumentada, es url-insert-file-contents
:
(with-temp-buffer
(url-insert-file-contents
"https://api.stackexchange.com/2.2/questions/12464?site=emacs")
(json-parse-buffer :object-type 'alist))
o equivalente, antes de Emacs 27 compilado con soporte nativo de JSON:
(require 'json)
(with-temp-buffer
(url-insert-file-contents
"https://api.stackexchange.com/2.2/questions/12464?site=emacs")
(let ((json-false :false))
(json-read)))
Estos resultan en:
((items .
[((tags .
["url" "http"])
(owner
(reputation . 10741)
(user_id . 227)
(user_type . "registered")
(accept_rate . 89)
(profile_image . "https://i.stack.imgur.com/ebO5J.jpg?s=128&g=1")
(display_name . "lunaryorn")
(link . "https://emacs.stackexchange.com/users/227/lunaryorn"))
(is_answered . t)
(view_count . 867)
(accepted_answer_id . 29798)
(answer_count . 3)
(score . 4)
(last_activity_date . 1517363132)
(creation_date . 1431861037)
(question_id . 12464)
(link . "/emacs/12464/go-to-body-after-url-retrieve-synchronously")
(title . "Go to body after url-retrieve-synchronously"))])
(has_more . :false)
(quota_max . 300)
(quota_remaining . 276))
La función url-insert-file-contents
envuelve las funciones mejor documentados url-insert-buffer-contents
y url-insert
por lo que viene con los siguientes extras:
- Carga automática por defecto.
- Existe desde al menos desde Emacs 21.
- Manejo simple de errores de respuesta HTTP a través de
url-http-response-status
.
- Decodifica datos.
FWIW, también viene con la garantía de ser utilizado por lisp/emacs-lisp/package.el
.
url-http-end-of-headers
es preferible a este enfoque. Realmente esperaba algourl-http-goto-body
así :(