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
shyrock
V2EX  ›  Python

urllib2 不支持 Connection:keep-alive?

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

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

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

    总之 requests 吧。
    shyrock
        10
    shyrock  
    OP
       2014-05-21 16:52:30 +08:00
    @Niris 本来我以为urllib会干这种事,但是在urllib的源码里面自己注明了因为不支持长连接,所以就给数据分块了。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5492 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 01:30 · PVG 09:30 · LAX 17:30 · JFK 20:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.