Requests gzip 压缩问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
charley
V2EX    Python

Requests gzip 压缩问题

  •  
  •   charley 2017-04-23 14:43:43 +08:00 via iPhone 5532 次点击
    这是一个创建于 3113 天前的主题,其中的信息可能已经有所发展或是发生改变。
    requests 在请求的时候会自动使用 gizp 压缩,因为请求服务器不支持 gzip 怎么取消 gzip 压缩?
    19 条回复    2017-04-24 21:24:32 +08:00
    firefox12
        1
    firefox12  
       2017-04-23 14:51:16 +08:00 via iPhone   1
    服务器不支持, response 的时候就是原始数据 客户端就自动使用原始数据。
    iyaozhen
        2
    iyaozhen  
       2017-04-23 16:33:22 +08:00 via Android
    一楼正解。只要服务端正规来, response header 不申明 gzip 压缩客户端就不会解压缩
    charley
        3
    charley  
    OP
       2017-04-23 17:13:25 +08:00 via iPhone
    是 requests 发送数据到服务器的时候压缩了,服务器识别不了,直接返回错误了
    charley
        4
    charley  
    OP
       2017-04-23 17:14:12 +08:00 via iPhone
    使用的是 post
    julyclyde
        5
    julyclyde  
       2017-04-23 18:15:20 +08:00
    楼上几位是不是没理解?
    提问者说的 requests 是一个库的名字,而不是和 response 对应的那个词
    raptium
        6
    raptium  
       2017-04-23 18:32:53 +08:00 via iPhone
    好像没听说过 HTTP 请求能压缩的……
    neoblackcap
        7
    neoblackcap  
       2017-04-23 18:37:44 +08:00
    @julyclyde 楼上几位都没有错,你理解错了。客户端就是在这里就是指 requests 这个库, http 报文没有说用 gzip 那么 requests 就不会用 gzip 解压,会使用原始报文。上面几楼解释得相当浅白了。
    至于 post 不接受 gzip, 此为一个解决方法可以参考 https://github.com/kennethreitz/requests/issues/1753
    firefox12
        8
    firefox12  
       2017-04-23 18:40:37 +08:00 via iPhone
    正常理解当然是 他用了 requests 库去请求 请求头里支持 gzip ,而服务器不支持 gzip 压缩,只能以原始数据回复。这并不影响使用


    如果 client 希望 request 的 body 使用 gzip ,这个应该是非标准的。这也是为什么服务器会不支持。
    lxy
        9
    lxy  
       2017-04-23 18:52:55 +08:00
    requests 本身默认 post 数据不会使用 gzip 进行压缩
    just1
        10
    just1  
       2017-04-23 19:32:39 +08:00 via Android
    标准的返回会标识是否 gzip , reqiests 会根据这个标识来处理(是否 gzip 解压)
    charley
        11
    charley  
    OP
       2017-04-23 20:39:37 +08:00 via iPhone
    谢谢各位回答,我是初学 python 的,我感觉是不是我哪里弄错了
    julyclyde
        12
    julyclyde  
       2017-04-23 21:06:29 +08:00
    @raptium 关于请求是否能压缩,前几年我还特地读过标准,是可以的,不过当年的 nginx 不支持……
    julyclyde
        13
    julyclyde  
       2017-04-23 21:07:18 +08:00
    @neoblackcap 你说的“ http 报文没有说用 gzip ”是什么?请用标准术语描述一遍
    neoblackcap
        14
    neoblackcap  
       2017-04-23 21:20:07 +08:00
    @julyclyde http 头部中的 Accept-Encoding 不带 gzip
    neoblackcap
        15
    neoblackcap  
       2017-04-23 21:28:15 +08:00
    @julyclyde 上面说错了, requests 是根据 http 头部的 Content-Encoding 或者 Transfer-Encoding 来决定是否启用 gzip 。但是楼主现在不是这个情况,他是发送请求给服务器,服务器不支持 gzip 压缩,但是 requests 发出 POST 请求的时候却会自动启用 gzip 。
    julyclyde
        16
    julyclyde  
       2017-04-23 21:40:48 +08:00
    这样吧,我来用规范的语言表达一下我的意思
    1 从标准的角度来说, HTTP 请求的 POST body 可以是压缩的(当然需要同时在 header 里声明)。但考虑到 HTTP 是一个先请求后响应的协议,服务器没办法提前声明自己的能力,所以正经客户端都不会发压缩的 POST 请求。我之前只遇到过某 android 模拟器会发压缩的
    2 很多服务器不认识压缩的 POST body ,也没有义务认识
    3 经过试验和阅读代码,我确认 python 的 requests 库在不指定的情况下,不会用压缩的方式发送 POST 请求
    4 尝试了给 requests.post 增加 Content-Encoding:gzip 的 header ,但发出去的请求依然是原文
    所以还是请 lz 先确认一下自己的问题是不是正确
    julyclyde
        17
    julyclyde  
       2017-04-23 21:41:34 +08:00
    @neoblackcap 我试过了,加这个 header 并不会使 requests 把需要 post 的数据先压缩了再发
    julyclyde
        18
    julyclyde  
       2017-04-23 21:43:02 +08:00
    @neoblackcap Accept-Encoding 是客户端向服务器声明自己是否支持压缩用的,和 post body 没什么关系
    mingyun
        19
    mingyun  
       2017-04-24 21:24:32 +08:00
    @julyclyde nice
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     868 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 20:58 PVG 04:58 LAX 13:58 JFK 16:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86