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超时和重试的更多相关文章

  1. python requests 超时与重试

    一 源起: requests模块作为python爬虫方向的基础模块实际上在日常实际工作中也会涉及到,比如用requests向对方接口url发送POST请求进行推送数据,使用GET请求拉取数据. 但是这 ...

  2. dubbo学习笔记(一)超时与重试

    dubbo提供在provider和consumer端,都提供了超时(timeout)和重试(retries)的参数配置. 配置方式 provider端在<dubbo:service>中配置 ...

  3. python+request接口自动化框架

    python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...

  4. python+request+robot framework接口自动化测试

    python+requests实现接口的请求前篇已经介绍,还有不懂或者疑问的可以访问 python+request接口自动化框架 目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出,通过关键字的 ...

  5. 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 =  ...

  6. 【3】JMicro微服务-服务超时,重试,重试间隔

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 接下来的内容都基于[2]JMicro微服务-Hello World做Demo 微服务中,超时和重试是一个最基本问题下面Dem ...

  7. python request接口测试笔记(1)

    python request接口测试笔记(1) 涉及到的功能说明: 需要登录拿到token,才能进行下一个接口的请求 读取csv文件中的信息,作为接口的参数 将接口响应结果,写入csv文件,以便分析统 ...

  8. Python+request+ smtplib 测试结果html报告邮件发送(上)《五》

    此方法通用适合所有邮箱的使用,只需注意几个点,如下: QQ邮箱.其他非QQ邮箱的写法,区别点如下: #--------------------------使用腾讯企业邮箱作为发件人的操作如下----- ...

  9. Python+Request库+第三方平台实现验证码识别示例

    1.登录时经常的出现验证码,此次结合Python+Request+第三方验证码识别平台(超级鹰识别平台) 2.首先到超级鹰平台下载对应语言的识别码封装,超级鹰平台:http://www.chaojiy ...

随机推荐

  1. CF796D Police Stations BFS+染色

    题意:给定一棵树,树上有一些点是警察局,要求所有点到最近的警察局的距离不大于 $d$,求最多能删几条边 ? 题解: 考虑什么时候一条边可以被断开:这条边的两个端点被两个不同的警察局覆盖掉. 我们要设计 ...

  2. pat 甲级 1057 Stack(30) (树状数组+二分)

    1057 Stack (30 分) Stack is one of the most fundamental data structures, which is based on the princi ...

  3. 【luogu4145】上帝造题的七分钟2 / 花神游历各国--区间开根-线段树

    题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段 ...

  4. Linux进程通信之mmap

    mmap()函数: void *mmap(void* addr,size_t length,int port,int flags,int fd,off_t offset); 返回:成功:返回创建的映射 ...

  5. gitlab高可用模式

    高可用模式 企业版 社区版 我们这里说一下成本比较低的主备模式,它主要依赖的是DRBD方式进行数据同步,需要2台ALL IN ONE的GitLab服务器,也就是通过上面安装方式把所有组件都安装在一起的 ...

  6. hive安装运行hive报错通解

    参考博文:https://blog.csdn.net/lsxy117/article/details/47703155 大部分问题还是hadoop的配置文件的问题: 修改配置文件hadoop/conf ...

  7. Codeforces 1239D. Catowice City

    传送门 如果选择 $i$ 当陪审团成员,那么 $i$ 认识的猫一定不能参加 又因为总人数和猫数要为 $n$ ,那么 $i$ 认识的猫 的主人也一定要当陪审团成员(不然总数不够) 所以可以考虑这样构图, ...

  8. 调皮捣蛋的Linux下有趣终端的合集

    *本文作者:国光,转载自 FreeBuf.COM,原文地址:https://www.freebuf.com/news/144050.html 前言 刚开始接触Linux的我们,肯定认为Linux系统就 ...

  9. 【git 命令总结】一

    git help config init commit diff rename mv rm head revert reset branch checkout branch-diff fast-for ...

  10. Java并发指南1:并发基础与Java多线程

    本文转载自互联网,侵删 什么是并发 在过去单CPU时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是 ...