python http2_HTTP/2和Python的支持现状-2019-10

背景:

大概2019年9月份,天猫全面升级了HTTP/2的支持,并且加强了HTTP/1的访问限制,也可能很早前就这么做了,

但之前一直没限制HTTP/1的访问。之所以发现这个问题,是因为写的爬虫突然失败率奇高,而且是间断性被封禁。当

被封禁的时候,使用Chrome浏览器报错为:ERR_SPDY_PROTOCOL_ERROR。休息个不到一分钟,就又可以正常访问。

于是开始分别使用HTTP/2和HTTP/1来测试,发现HTTP/2的爬取顺畅无比,HTTP/1几下就挂了。

原因搞清楚了,下面该是解决问题的时候了。

爬虫下载使用了Python的requests库,google一番发现requests并不支持HTTP/2。可能大神很忙,没工夫

维护了。于是再次使用google大法,找到了hyper库,一个纯Python的HTTP/2客户端。

本来用惯了requests,突然换hyper感觉不太适应,没想到作者很贴心的提供了requests的支持:Requests Integration。

先赞一个!!!

本以为问题到此结束,代码小改一下就完事,没想到的是,前 方 还 有 很 多 坑。。。

第一个坑(不支持代理):

hyper目前在PYPI上最新版本为hyper 0.7.0,竟然不支持代理。WTF,如果不支持代理,要你何用???

瞅了一眼github仓库的提交时间,发现最后提交是 3年前,看来这位大神最近也很忙,没工夫搞这个了。(估计是当

时HTTP/2客户端没啥需求)本以为,要花费整个国庆假期,不知道要死多少脑细胞才能把这个坑给填上的我,在又

google了一天之后突然发现,在这个github仓库的development分支上,有人已经填坑了:

于是,代理的问题解决,然后看下一个坑。

第二个坑(内存泄漏严重):

由于采集量太大,为了提高效率,爬虫采用了gevent+requests的并发架构。本来就有一些内存泄漏的现象,一

直没找到原因,不过还好不是很严重,也就没管。只是没想到,使用development版hyper之后, 内存泄漏的速度一

下提升了很多很多倍,以前一天重启一次的容器,现在要1小时不到就得重启,短期没啥事,但这个问题总归还是得解决

的。

本来不想放弃的requests,最后还是被我放弃了。在同事的提醒下,尝试了使用pycurl这个封装了libcurl的下

载库。发现libcurl果然强大,HTTP2甚至HTTP3都支持了,代理支持没问题,内存泄漏也没问题。

pycurl文档:http://pycurl.io/docs/latest/  (吐槽一下:易用性跟requests比起来简直就是天上地下)

然而貌似很美好的事情,却总是各种意外打破。pycurl是调用的C语言写好的库,而我用了gevent来实先并发,在

gevent+C语言的环境下,gevent就是个废材。为了修复内存泄漏,而放弃并发。这个代价太高了。。。。。。

好在天无绝人之路,google大法的使用下,又被我找到了一个把gevent和pycurl结合起来的办法:

不过这个源码在最新版本的gevent下无法运行,修复后的版本在这里:

完结撒花。。。。

下面分享一下google过程中收集的一些关于HTTP/2的资料:

一位WEB端牛人的博客

其他资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值