urllib2 不支持 Connection:keep-alive?

2014-05-20 17:44:08 +08:00
 shyrock
我在尝试一个模拟登录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?

先谢了。
7928 次点击
所在节点    Python
10 条回复
yxjxx
2014-05-20 18:00:48 +08:00
用requests吧
phyng
2014-05-20 18:15:10 +08:00
我就知道有人推荐requests……#说实话遇见requests再没有碰过urllib*
ericls
2014-05-20 18:39:39 +08:00
@phyng 确实 超爽
ushuz
2014-05-20 18:46:27 +08:00
是的,不支持,urllib2有历史了。用requests即可。
fghzpqm
2014-05-20 18:47:00 +08:00
是的,不支持。

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

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

总之 requests 吧。
shyrock
2014-05-21 16:52:30 +08:00
@Niris 本来我以为urllib会干这种事,但是在urllib的源码里面自己注明了因为不支持长连接,所以就给数据分块了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/113443

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX