За это отвечает библиотека urllib3
, в функции urllib3.util.connection.create_connection()
. Там есть al oop, который проверяет каждый результат из socket.getaddrinfo()
:
for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
# ....
try:
sock = socket.socket(af, socktype, proto)
# ...
sock.connect(sa)
return sock
except socket.error as e:
# ...
К сожалению, в этом разделе не ведется ведение журнала. Если вам нужно вести журнал, вам нужно будет скопировать источник функции, добавить необходимые записи, а затем установить код urllib3
, чтобы использовать вместо него вашу версию.
Единственное место, где используется эта функция, использует это в качестве атрибута в импортированном модуле , поэтому, по крайней мере, создание обезьяньих патчей так же просто, как присвоение его исходному расположению функции:
import urllib3.util.connection
def create_connection_with_logging(
address,
timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
source_address=None,
socket_options=None,
):
# ....
urllib3.util.connection.create_connection = create_connection_with_logging