如何在wsgi应用程序中使用gzip编码?

用户名

我正在尝试使用wsgi输出gzip编码的字符串,这是我的尝试,但是不幸的是,浏览器仅解码第一个字符串,有帮助吗?

测试1:

import zlib

def application(environ, start_response):
    headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding', 'gzip')]
    data = b'\x1f\x8b\x08\x00\x00\x00\x00\x00'
    data += zlib.compress(b'test')[:-4]
    data += zlib.compress(b'test2')[:-4]
    headers.append(('Content-Length', str(len(data))))
    start_response('200 OK',headers)
    return [data]

测试2:

import zlib

def application(environ, start_response):
    headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding', 'gzip')]
    data = b'\x1f\x8b\x08\x00\x00\x00\x00\x00'
    data += zlib.compress(b'test')
    data += zlib.compress(b'test2')
    headers.append(('Content-Length', str(len(data))))
    start_response('200 OK',headers)
    return [data]

测试3:

import zlib

def application(environ, start_response):
    headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding', 'gzip')]
    start_response('200 OK',headers)
    yield b'\x1f\x8b\x08\x00\x00\x00\x00\x00'
    yield zlib.compress(b'test')[:-4]
    yield zlib.compress(b'test2')[:-4]

测试4:

import zlib

def application(environ, start_response):
    headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding', 'gzip')]
    start_response('200 OK',headers)
    yield b'\x1f\x8b\x08\x00\x00\x00\x00\x00'
    yield zlib.compress(b'test')
    yield zlib.compress(b'test2')

测试5:

import gzip

def application(environ, start_response):
    headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding', 'gzip')]
    start_response('200 OK',headers)
    yield gzip.compress(b'test')
    yield gzip.compress(b'test2')
用户

我认为问题在于:

 gzip.compress(b'test')

返回一个字符串

 header  content  THE END 

在里面。

这意味着当您阅读它时,解压缩将仅返回b'test'。自己尝试。

两种解决方案取决于您要实现的目标:

  1. 创建多部分消息。每个产量都是一个新文件
  2. compress 做这个:

    def compress(data, compresslevel=9):
    
        """Compress data in one shot and return the compressed string.
        Optional argument is the compression level, in range of 0-9.
        """
        buf = io.BytesIO()
        with GzipFile(fileobj=buf, mode='wb', compresslevel=compresslevel) as f:
            f.write(data)
        return buf.getvalue()
    

    做这样的事情:

    import gzip, io
    
    def application(environ, start_response):
        headers = [('Content-Type', 'text/html; charset=utf-8'),('Content-Encoding',     'gzip')]
        start_response('200 OK',headers)
        buf = io.BytesIO()
        with GzipFile(fileobj=buf, mode='wb') as f:
             f.write(b'test')
             f.write(b'test2')
        return buf
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在wsgi应用程序中使用gzip编码?

来自分类Dev

如何在Grails应用程序中使用API

来自分类Dev

如何在多线程应用程序中使用Hibernate?

来自分类Dev

如何在应用程序中使用像素图?

来自分类Dev

如何在SailsJS应用程序中使用OrientDB

来自分类Dev

如何在WPF应用程序中使用MSHTML

来自分类Dev

如何在Xcode中使用测试(iOS应用程序)

来自分类Dev

如何在MVC应用程序中使用TypeScript

来自分类Dev

如何在iOS应用程序中使用SVG图像

来自分类Dev

如何在余烬应用程序中使用piwik?

来自分类Dev

如何在Rails应用程序模板中使用postgres?

来自分类Dev

如何在Sinatra应用程序中使用sidekiq监控?

来自分类Dev

如何在sailsjs应用程序中使用漂亮错误?

来自分类Dev

如何在WPF应用程序中使用Ninject

来自分类Dev

如何在离线应用程序中使用mysql?

来自分类Dev

如何在SailsJS应用程序中使用多个布局?

来自分类Dev

如何在Express应用程序中使用DefinitetlyTyped定义

来自分类Dev

如何在OSGi应用程序中使用JACOB?

来自分类Dev

如何在C#应用程序中使用FluentValidation

来自分类Dev

如何在Ionic应用程序中使用Google Charts

来自分类Dev

如何在PHP应用程序中使用Angular 2?

来自分类Dev

如何在跨平台应用程序中使用QtWinExtras

来自分类Dev

如何在CatberryJS应用程序中使用jQuery?

来自分类Dev

如何在OSX应用程序中使用Core Bluetooth?

来自分类Dev

如何在MVC设计的应用程序中使用SQLAlchemy?

来自分类Dev

如何在Xamarin Android应用程序中使用动画?

来自分类Dev

如何在桌面应用程序中使用测量协议

来自分类Dev

如何在空白的Android应用程序中使用MVVMCross

来自分类Dev

如何在Android中使用多个“应用程序类”?

Related 相关文章

  1. 1

    如何在wsgi应用程序中使用gzip编码?

  2. 2

    如何在Grails应用程序中使用API

  3. 3

    如何在多线程应用程序中使用Hibernate?

  4. 4

    如何在应用程序中使用像素图?

  5. 5

    如何在SailsJS应用程序中使用OrientDB

  6. 6

    如何在WPF应用程序中使用MSHTML

  7. 7

    如何在Xcode中使用测试(iOS应用程序)

  8. 8

    如何在MVC应用程序中使用TypeScript

  9. 9

    如何在iOS应用程序中使用SVG图像

  10. 10

    如何在余烬应用程序中使用piwik?

  11. 11

    如何在Rails应用程序模板中使用postgres?

  12. 12

    如何在Sinatra应用程序中使用sidekiq监控?

  13. 13

    如何在sailsjs应用程序中使用漂亮错误?

  14. 14

    如何在WPF应用程序中使用Ninject

  15. 15

    如何在离线应用程序中使用mysql?

  16. 16

    如何在SailsJS应用程序中使用多个布局?

  17. 17

    如何在Express应用程序中使用DefinitetlyTyped定义

  18. 18

    如何在OSGi应用程序中使用JACOB?

  19. 19

    如何在C#应用程序中使用FluentValidation

  20. 20

    如何在Ionic应用程序中使用Google Charts

  21. 21

    如何在PHP应用程序中使用Angular 2?

  22. 22

    如何在跨平台应用程序中使用QtWinExtras

  23. 23

    如何在CatberryJS应用程序中使用jQuery?

  24. 24

    如何在OSX应用程序中使用Core Bluetooth?

  25. 25

    如何在MVC设计的应用程序中使用SQLAlchemy?

  26. 26

    如何在Xamarin Android应用程序中使用动画?

  27. 27

    如何在桌面应用程序中使用测量协议

  28. 28

    如何在空白的Android应用程序中使用MVVMCross

  29. 29

    如何在Android中使用多个“应用程序类”?

热门标签

归档