热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

requests如何在不下载响应体的情况下重用连接?

实际需求场景是想让爬虫只通过检验http的返回码,以此校验之前下载的某个资源是否还在线;因为并不需要下载响应体,所以使用了requests的Session对象并在动词方法中添加了stream=

实际需求场景是想让爬虫只通过检验http的返回码,以此校验之前下载的某个资源是否还在线;因为并不需要下载响应体,所以使用了requests的Session对象并在动词方法中添加了stream = True的参数,如下:



1
2
3
4
5
6
    s = requests.Session()

    s.mount('http://', requests.adapters.HTTPAdapter(pool_cOnnections=1, pool_maxsize=1))

    for i in range(20):

        url = "http://www.site.com/resources/%s" % i

        with closing(s.get(url, allow_redirects = False, stream = True)) as r:

            print r.status_code

因为启用了stream = True模式,未下载响应体的情况下,连接不会关闭,肯定是无法重用连接池中的连接了,可是强制关闭连接的话,日志输出是这样:

1
INFO - connectionpool.py[249] - Resetting dropped connection: www.site.com

感觉这个“Resetting dropped connection”跟文档里写的不太一致呢? requests的文档中写道:




如果你在请求中把 stream 设为 True,Requests 无法将连接释放回连接池,除非你 消耗了所有的数据,或者调用了 Response.close。

文档说关闭响应后Requests应该被“释放回连接池”,但实际上它是被关闭然后再需要时被“重新设置”了,跟不加stream = True参数时,“无缝”重用似乎是不一样的。

那么究竟该怎么做才能做到既不下载相应体,又能重用连接呢?还有关闭请求、关闭连接应该是一回事吧?


   



推荐阅读
author-avatar
钟钟来了_960
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有