python - 将 Session 与 HTTPAdapter 一起使用时,Python 请求不会引发异常
问题描述
我使用 python 监视在我的服务上创建的几个动态 DNS 条目,但由于某种原因,一台主机macmillan.dynamix.pro
导致脚本无限期冻结。
下面的代码使用 requests 头方法来获取状态码。第一个 try catch 块不使用 Retry() 对象,并按预期抛出异常。但是,第二个 try catch 块不会引发异常,并且脚本会因使用从创建的 requests.Session() 对象而无限期冻结def requests_retry_session
############################
# Imports #
############################
from urlparse import urlparse
from threading import Thread
from Queue import Queue
import httplib
import re
import urllib2
import socket
import requests # sudo pip install requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
# Below comes from https://www.peterbe.com/plog/best-practice-with-retries-with-requests
def requests_retry_session(
retries=0,
backoff_factor=1,
status_forcelist=(500, 502, 504),
session=None,
):
session = session or requests.Session()
retry = Retry(
total=None,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status=retries,
status_forcelist=status_forcelist,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
return session
try:
urlResp = requests.head("https://macmillan.dynamix.pro", timeout=(3, 3), verify=False)
status = str(urlResp.status_code)
print "Status is " + status
except Exception as e:
print "bad " + str(e)
try:
urlResp = requests_retry_session().head("https://macmillan.dynamix.pro", timeout=(3, 3), verify=False)
status = str(urlResp.status_code)
print "Status is " + status
except Exception as e:
print "bad " + str(e)
有谁知道为什么会这样?
解决方案
推荐阅读
- amazon-web-services - 如何使用 AWS ALB ECS .netcore API 设置 https?
- rust - 通过两个向量嵌套for循环
- python - 保存/加载数据(使用python)将在很长一段时间内每周更新的最佳策略是什么?
- python - Flask SQLAlchemy MySql 错误 1045 用户'root'@'localhost'的访问被拒绝(使用密码:否)
- python - Pygame 窗口打不开
- javascript - 我正在将徽标添加到 qrcode 的中心,但图像质量很差。如何提高质量?
- javascript - 并排显示折叠部分
- javascript - 按钮在其后放置元素时停止工作(javascript)
- r - 警告消息:ggrepel:1 个未标记的数据点(重叠过多)。考虑增加 max.overlaps
- azure-data-factory - 通过 ADF 从 AAS 复制数据