代码之家  ›  专栏  ›  技术社区  ›  rafl

使用url retrieve解码gzip-ed响应体

  •  6
  • rafl  · 技术社区  · 14 年前

    wget , curl ,或 w3m 为了能做到这一点,我用 url-retrieve

    我正在与之交谈的一个HTTP服务器碰巧忽略了 Accept-Encoding 并坚持始终用 Content-Encoding: gzip

    因此,事实上 url检索 url检索

    我正在寻找一种方法来解码响应体,最好是在数据到达时逐块解码。有没有办法指导 url检索 为了我?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Gareth Rees    14 年前

    什么 auto-compression-mode 是对要解压缩的文件运行gzip。例如,请参见 jka-compr-insert-file-contents jka-compr.el . 所以如果你想用 自动压缩模式 要进行解压缩,首先需要将响应写入文件。例如,类似这样的:

    (defun uncompress-callback (status)
      (let ((filename (make-temp-file "download" nil ".gz")))
        (search-forward "\n\n")               ; Skip response headers.
        (write-region (point) (point-max) filename)
        (with-auto-compression-mode
          (find-file filename))))
    
    (url-retrieve "http://packages.ubuntu.com/hardy/allpackages?format=txt.gz"
                  #'uncompress-callback)
    

    (如果您不想创建临时文件,您可以自己管理子流程,但这并不像您在问题中所暗示的那样复杂。)