Para una extensión de Emacs, me gustaría recuperar datos a través de HTTP. No me gusta mucho la idea de desembolsar cosas como wget
, curl
o w3m
para poder hacer eso, así que estoy usando la función url-retrieve
.Descodificación de cuerpos de respuesta gzip-ed con url-retrieve
Uno de los servidores HTTP con los que estoy hablando pasa a ignorar los encabezados Accept-Encoding
e insiste en enviar siempre sus datos con Content-Encoding: gzip
.
Como resultado de eso, y del hecho de que url-retrieve
no decodifica automáticamente cuerpos de respuesta, el búfer url-retrieve
me presentará contendrá datos gzip binarios.
Estoy buscando una forma de decodificar el cuerpo de la respuesta, preferiblemente trozo por fragmento, a medida que llegan los datos. ¿Hay alguna manera de ordenar url-retrieve
que haga esto por mí?
Descodificar la respuesta de una sola vez, una vez que llegó por completo, también sería aceptable, pero preferiría evitar toda la fubar involucrada en la creación de un subproceso asíncrono ejecutando gzip, canalizando partes de la respuesta a eso, y leyendo los trozos decodificados de nuevo - Estaría buscando alguna función de biblioteca aquí.
Emacs obviamente tiene incorporado gzip, ya que puede abrir archivos comprimidos, editarlos y guardarlos de forma transparente. La pregunta es ... ¿dónde está este gancho y la respuesta no es obvia? – jrockway
Gracias, John. Si bien sabía que podía abrir archivos comprimidos gzip, realmente no se me ocurrió que esto podría estar relacionado, pero obviamente lo es. Desde la apertura de un archivo .gz en el disco, mirando '* Messages *' y buscando en mis directorios elisp lo que sea que obtuve, descubrí que el código implementado es 'jka-cmpr-hook.el' y/o' jka- compr.el'. Parece probable que este problema sea fácil de resolver con una sola de las funciones proporcionadas por aquellos. 'with-auto-compression-mode' parece más prometedor en este momento. – rafl
tipo de fuera de tema, pero ¿sabes si url-retrieve puede manejar https? – sigjuice