时间:2021-05-22
前言
requests是Python发送接口请求非常好用的一个三方库,由K神编写,简单,方便上手快。但是requests发送请求是串行的,即阻塞的。发送完一条请求才能发送另一条请求。
为了提升测试效率,一般我们需要并行发送请求。这里可以使用多线程,或者协程,gevent或者aiohttp,然而使用起来,都相对麻烦。
grequests是K神基于gevent+requests编写的一个并发发送请求的库,使用起来非常简单。
安装方法: pip install gevent grequests
项目地址:https://github.com/spyoungtech/grequests
grequests简单使用
首先构造一个请求列表,使用grequests.map()并行发送,得到一个响应列表。示例如下。
import grequestsreq_list = [ # 请求列表 grequests.get('http://httpbin.org/get?a=1&b=2'), grequests.post('http://httpbin.org/post', data={'a':1,'b':2}), grequests.put('http://httpbin.org/post', json={'a': 1, 'b': 2}),]res_list = grequests.map(req_list) # 并行发送,等最后一个运行完后返回print(res_list[0].text) # 打印第一个请求的响应文本grequests支持get、post、put、delete等requests支持的HTTP请求方法,使用参数和requests一致,发送请求非常简单。
通过遍历res_list可以得到所有请求的返回结果。
grequests和requests性能对比
我们可以对比下requests串行和grequests并行请求100次github.com的时间,示例如下。
使用requests发送请求
import requestsimport timestart = time.time()res_list = [requests.get('https://github.com') for i in range(100)]print(time.time()-start)实际耗时约100s+
使用grequests发送
import grequestsimport timestart = time.time()req_list = [grequests.get('https://github.com') for i in range(100)]res_list = grequests.map(req_list)print(time.time()-start)实际耗时约3.58s
异常处理
在批量发送请求时难免遇到某个请求url无法访问或超时等异常,grequests.map()方法还支持自定义异常处理函数,示例如下。
import grequestsdef err_handler(request, exception): print("请求出错")req_list = [ grequests.get('http://httpbin.org/delay/1', timeout=0.001), # 超时异常 grequests.get('http://fakedomain/'), # 该域名不存在 grequests.get('http://httpbin.org/status/500') # 正常返回500的请求]res_list = grequests.map(reqs, exception_handler=err_handler)print(res_list)运行结果:
请求出错请求出错[None, None, <Response [500]>]以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言在Python爬虫中,使用requests发送请求,访问指定网站,是常见的做法。一般是发送GET请求或者POST请求,对于GET请求没有什么好说的,而发送P
一.摘要做接口自动化测试时,常常需要使用python发送一些json内容的接口报文,如果使用urlencode对内容进行编码解析并发送请求,会发现服务器返回了2
前言requests是Python发送接口请求非常好用的一个三方库,由K神编写,简单,方便上手快。但是requests发送请求是串行的,即阻塞的。发送完一条请求
解决Python3控制台输出InsecureRequestWarning的问题问题:使用Python3requests发送HTTPS请求,已经关闭认证(veri
本文研究的主要是Python使用requests发送POST请求的相关内容,具体介绍如下。一个http请求包括三个部分,为别为请求行,请求报头,消息主体,类似以