timeout 没参数的时候

requests默认情况下是不进行超时限制的,所以没有加入timeout时你的代码有可能被挂起几分钟或者更长的时间。

timeout ☝️个参数的时候

例如:timeout(3)时,表示客户端实现到远端机器端口的连接时,等待的秒速。由于 TCP 数据包重传窗口默认时间是3秒,所以timeout必须大于或等于3才有意义。

timeout ✌️个参数的时候

例如:timeout(3, 20)时,表示connect连接的超时时间为3秒,数据read读取的超时时间为20秒,这是也可以写成timeout(23),表示connect和read等待⌛️总时间为20秒。建议根据URL业务情况调配,读取图片之类就提高read时间,访问的是国外网址就把conntect时间调高。

补充:HTTPAdapter 的使用

max_retries用于配置requests重试次数

直接上代码

import requests
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter


req_session = requests.Session()
req_session.mount('http://', HTTPAdapter(max_retries=3))
req_session.mount('https://', HTTPAdapter(max_retries=3))
 
try:
  req_content= req_session.get('https://www.lubaogui.com', timeout=20)
  return req_content.text
except requests.exceptions.RequestException as e:
  print(e)

使用requests.get,异常默认会重试3次(不包括第☝️次)。

当DNS解析错误、链接错误、链接超时等异常才会促发重试。在比如读取超时、写超时、HTTP协议错误等不促发。

异常促发的错误为MaxRetriesError。