推荐学习书目
› 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
shyrock
V2EX  ›  Python

urllib2 不支持 Connection:keep-alive?

  •  
  •   shyrock · May 20, 2014 · 9069 views
    This topic created in 4556 days ago, the information mentioned may be changed or developed.
    我在尝试一个模拟登录chiphell的程序时,发现浏览器返回的页面是完整可解析的,但是我的python程序返回的是Transfer-Encoding: chunked, Connection:close。。。完全不知道该怎么解析一团乱码的返回数据。。。但是明明在header里面设置了Connection:keep-alive的。
    跟进urllib2发现这句话‘We want to make an HTTP/1.1 request, but the addinfourl
    # class isn't prepared to deal with a persistent connection.’

    我郁闷,哪位大侠知道怎么解析chunked数据?或者说换个http库可以支持keep-alive?

    先谢了。
    10 replies  •  2014-05-21 16:52:30 +08:00
    yxjxx
    yxjxx
    May 20, 2014❤️1
    1
    用requests吧
    phyng
    phyng
    May 20, 2014
    2
    我就知道有人推荐requests……#说实话遇见requests再没有碰过urllib*
    ericls
    ericls
    May 20, 2014
    3
    @phyng 确实 超爽
    ushuz
    ushuz
    May 20, 2014 via iPhone❤️1
    4
    是的,不支持,urllib2有历史了。用requests即可。
    fghzpqm
    fghzpqm
    May 20, 2014❤️1
    5
    是的,不支持。

    是的,你应该换 requests.
    shyrock
    shyrock
    OP
    May 21, 2014
    6
    感谢各位回复,用requests去了。。。
    Niris
    Niris
    May 21, 2014❤️1
    7
    chunked 需要自己解析。
    格式说明可以看 http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6.1 。
    处理起来也不难,可以参考 Guido 的实现 https://github.com/aosabook/500lines/blob/master/crawler/crawling.py#L233-L259 。

    直接用 requests 当然更简单些。
    shyrock
    shyrock
    OP
    May 21, 2014
    8
    @Niris 感谢,虽然用requests解决了还是学习ing
    Niris
    Niris
    May 21, 2014
    9
    @shyrock

    其实我发现自己搞错了……
    解析 chunked 是 urllib/requests 之类的库干的事情,使用 urllib 应该不会碰上这事才对呀。

    总之 requests 吧。
    shyrock
    shyrock
    OP
    May 21, 2014
    10
    @Niris 本来我以为urllib会干这种事,但是在urllib的源码里面自己注明了因为不支持长连接,所以就给数据分块了。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   897 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 21:10 · PVG 05:10 · LAX 13:10 · JFK 16:10
    ♥ Do have faith in what you're doing.