V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

urllib2 不支持 Connection:keep-alive?

  •  
  •   shyrock · 2014-05-20 17:44:08 +08:00 · 4589 次点击
    这是一个创建于 1283 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在尝试一个模拟登录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 回复  |  直到 2014-05-21 16:52:30 +08:00
        1
    yxjxx   2014-05-20 18:00:48 +08:00   ♥ 1
    用requests吧
        2
    phyng   2014-05-20 18:15:10 +08:00
    我就知道有人推荐requests……#说实话遇见requests再没有碰过urllib*
        3
    ericls   2014-05-20 18:39:39 +08:00
    @phyng 确实 超爽
        4
    ushuz   2014-05-20 18:46:27 +08:00 via iPhone   ♥ 1
    是的,不支持,urllib2有历史了。用requests即可。
        5
    fghzpqm   2014-05-20 18:47:00 +08:00   ♥ 1
    是的,不支持。

    是的,你应该换 requests.
        6
    shyrock   2014-05-21 10:24:45 +08:00
    感谢各位回复,用requests去了。。。
        7
    Niris   2014-05-21 15:06:54 +08:00   ♥ 1
    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 当然更简单些。
        8
    shyrock   2014-05-21 15:23:16 +08:00
    @Niris 感谢,虽然用requests解决了还是学习ing
        9
    Niris   2014-05-21 16:22:01 +08:00
    @shyrock

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

    总之 requests 吧。
        10
    shyrock   2014-05-21 16:52:30 +08:00
    @Niris 本来我以为urllib会干这种事,但是在urllib的源码里面自己注明了因为不支持长连接,所以就给数据分块了。。。
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   634 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 50ms · UTC 18:43 · PVG 02:43 · LAX 10:43 · JFK 13:43
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1