Python+request超时和重试
Python+request超时和重试
一、什么是超时?
1、连接超时
连接超时指的是没连接上,超过指定的时间内都没有连接上,这就是连接超时。(连接时间就是httpclient发送请求的地方开始到连接上目标主机url地址的时间)
2、读取超时
读取超时表示的是连接上了,但是读数据时超过了指定的时间范围,这就是读取超时(读取时间就是HttpClient已经连接到了目标服务器,然后进行内容数据的获取的时间)
二、为什么要设置重试?
比如连接超时,程序就一直处于无响应状态。这时我们需要去不断重试连接,但也不可能是无止境的去重试,所以需要设置一个timeout超时时间。在timeout超时时间内如果无法连接到目标主机url地址,就返回一个异常错误(将这个连接超时的的特殊url写到log日志中,方便管理员查看;读取的数据量大,或者是目标服务器本身的问题(比如读取数据库慢,并发量大等...)也会影响读取时间也可以设置读取超时就返回报错。方便业务管理和问题定位)
1-1 连接超时案例(原始)
- import requests
- url = 'http://www.google.com.hk'
- r = requests.get(url)
- print(r.text)
运行结果:
- raise ConnectionError(e, request=request)
- requests.exceptions.ConnectionError: HTTPConnectionPool(host='www.google.com.hk', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0404D230>: Failed to establish
- a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。',))
由1-1案例可以看到因为连接超时,报了一个ConnectionError连接异常。所以为了防止程序因为连接超时报异常导致程序停止运行。我们就使用try……except……做一个异常处理。
1-2 连接超时案例(加requests异常处理)
- import requests
- import time
- url = 'http://www.google.com.hk'
- try:
- print(time.strftime('%Y-%m-%d %H:%M:%S'))
- r = requests.get(url)
- except requests.exceptions.ConnectionError as e:
- print("连接超时")
- print(time.strftime('%Y-%m-%d %H:%M:%S'))
运行结果:
- 2019-09-24 16:54:50
- 连接超时
- 2019-09-24 16:55:11
由1-2案例可以看出,使用try……except……异常处理后,没有再报错。并且可以看出默认的超时时间是21秒
1-3连接超时案例(修改默认超时时间)
- import requests
- import time
- url = 'http://www.google.com.hk'
- try:
- print(time.strftime('%Y-%m-%d %H:%M:%S'))
- r = requests.get(url,timeout=5)#timeout修改了超时时间,以秒为单位
- except requests.exceptions.ConnectionError as e:
- print("连接超时")
- print(time.strftime('%Y-%m-%d %H:%M:%S'))
运行结果:
- 2019-09-24 17:16:52
- 连接超时
- 2019-09-24 17:16:57
由案例1-3得出,设置timeout=5后,默认超时时间被修改成了5秒。所以当碰到一些页面请求时间相应时间过长的情况下,我们可以适当的延长超时时间来达到成功访问页面
1-4连接超时案例(设置多次请求次数)
- import requests
- import time
- from requests.adapters import HTTPAdapter
- url = 'http://www.google.com.hk'
- s = requests.Session()
- s.mount('http://',HTTPAdapter(max_retries=3))#设置重试次数为3次
- s.mount('https://',HTTPAdapter(max_retries=3))
- try:
- s.get(url,timeout=5)
- except requests.exceptions.ConnectionError as e:
- print('连接失败,该URL可能被墙掉了')
运行结果:
- 连接失败,该URL可能被墙掉了
参考文档:https://www.jianshu.com/p/0a15c253a0d9(设置requests中的重复请求) 、https://2.python-requests.org//zh_CN/latest/user/advanced.html#transport-adapters(requests 2.18.1中文文档中适配器和请求超时)
Python+request超时和重试的更多相关文章
- python requests 超时与重试
一 源起: requests模块作为python爬虫方向的基础模块实际上在日常实际工作中也会涉及到,比如用requests向对方接口url发送POST请求进行推送数据,使用GET请求拉取数据. 但是这 ...
- dubbo学习笔记(一)超时与重试
dubbo提供在provider和consumer端,都提供了超时(timeout)和重试(retries)的参数配置. 配置方式 provider端在<dubbo:service>中配置 ...
- python+request接口自动化框架
python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...
- python+request+robot framework接口自动化测试
python+requests实现接口的请求前篇已经介绍,还有不懂或者疑问的可以访问 python+request接口自动化框架 目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出,通过关键字的 ...
- python request
python request a. 客户端向服务端发送多层字典的值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 obj = ...
- 【3】JMicro微服务-服务超时,重试,重试间隔
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 接下来的内容都基于[2]JMicro微服务-Hello World做Demo 微服务中,超时和重试是一个最基本问题下面Dem ...
- python request接口测试笔记(1)
python request接口测试笔记(1) 涉及到的功能说明: 需要登录拿到token,才能进行下一个接口的请求 读取csv文件中的信息,作为接口的参数 将接口响应结果,写入csv文件,以便分析统 ...
- Python+request+ smtplib 测试结果html报告邮件发送(上)《五》
此方法通用适合所有邮箱的使用,只需注意几个点,如下: QQ邮箱.其他非QQ邮箱的写法,区别点如下: #--------------------------使用腾讯企业邮箱作为发件人的操作如下----- ...
- Python+Request库+第三方平台实现验证码识别示例
1.登录时经常的出现验证码,此次结合Python+Request+第三方验证码识别平台(超级鹰识别平台) 2.首先到超级鹰平台下载对应语言的识别码封装,超级鹰平台:http://www.chaojiy ...
随机推荐
- 014_编写批量修改扩展名脚本,如批量将 txt 文件修改为 doc 文件
#!/bin/bash#执行脚本时,需要给脚本添加位置参数 带参for i in "ls *.$1"do #去尾 mv $i ${i%.*}.$2done
- 04_实时监控本机内存和硬盘剩余空间,剩余内存小于 500M、根分区剩余空间小于 1000M 时,发送报警邮件给root 管理员.
#!/bin/bash#提取根分区剩余空间disk_size=$(df -h / | awk '/\//{print $4}')#提取内存剩余空间disk_size=$(df -h / | awk ' ...
- vue-ckeditor-word粘贴
我司需要做一个需求,就是使用富文本编辑器时,不要以上传附件的形式上传图片,而是以复制粘贴的形式上传图片. 在网上找了一下,有一个插件支持这个功能. WordPaster 安装方式如下: 直接使用Wor ...
- learning express step(十)
when develop expree meet some errors, we show how to solve Error: No default engine was specified an ...
- CSP-S模拟68 题解
T1: 不难想到贪心,但是怎么贪,他有两个限制条件,所以不是很好搞,所以用一个类似与wqs二分的思路我可能在口胡,因为你肯定要把最小的给删掉,所以你限定一个x或y,然后在选出另一个限制,所以要同时维护 ...
- MySQL服务器基准测试
一.基准测试简介 1.什么是基准测试 数据库的基准测试是对数据库的性能指标进行定量的.可复现的.可对比的测试. 基准测试与压力测试 基准测试可以理解为针对系统的一种压力测试.但基准测试不关心业务逻辑, ...
- zabbix之自定义告警
zabbix支持内置的告警类型.email,sms,等 有时候需要自定义类型的. [其他微信,钉钉都差不多方式,只是脚本不一样] 自定义告警类型[自定义邮件] 编写自定义脚本,并测试成功. [脚本需要 ...
- windows游戏编程鼠标
①.常用鼠标消息: WM_MOUSEMOVE 鼠标移动位置 WM_LBUTTONDOWN 鼠标左键按下 WM_LBUTTONUP 鼠标左键弹起 ...
- 用MFC构造DIRECTX应用框架
一. MFC类库与DirectXSDK Microsoft DirectX SDK是开发基于 Windows平台游戏的一个软件开发工具,其主要功能主要包括在五个组件中: DirectDraw. Dir ...
- Tomcat部署时war和war exploded区别以及如何实现热部署
war和war exploded的区别 使用IDEA配置Tomcat服务的时候,在 Select Artifacts to Deploy 选项中相同项目名有war和 war explode ...