Периодические ошибки прокси-сервера при использовании библиотеки O365 для доступа к сайту Sharepoint

#python #sharepoint #proxy #microsoft-graph-api #urllib3

#python #sharepoint #прокси #microsoft-graph-api #urllib3

Вопрос:

В настоящее время я использую библиотеку O365 через планировщик воздушного потока в контейнере Docker. Библиотека отлично работает для меня вне контейнера Airflow Docker, однако в Airflow я получаю периодические ошибки прокси-сервера, особенно когда я обращаюсь к API одновременно или с очень короткими интервалами между ними, например, при последовательном или одновременном запуске разных ноутбуков. Однако иногда это работает, если я выделяю время выполнения моего скрипта.

Я использую API через приложение Azure AD с сайтами.Разрешение ReadWriteAll.

Я использую версию 2.0.11 библиотеки O365.

Я использую тип предоставления учетных данных клиента с помощью метода учетной записи.

 from O365 import Account

credentials = ('my_client_id', 'my_client_secret')

# the default protocol will be Microsoft Graph

account = Account(credentials, auth_flow_type='credentials', tenant_id='my-tenant-id')
if account.authenticate():
   print('Authenticated!')
  

Мой прокси-сервер должен работать нормально, поскольку я все еще могу время от времени получать доступ к сайту Sharepoint.

Мне интересно, сталкивались ли с этой ошибкой другие раньше, и если да, то как ее исправить?

Спасибо

Вот фрагмент ошибки

 ConnectionRefusedError                    Traceback (most recent call last)
/usr/local/lib/python3.7/site-packages/urllib3/connection.py in _new_conn(self)
    159             conn = connection.create_connection(
--> 160                 (self._dns_host, self.port), self.timeout, **extra_kw
    161             )

/usr/local/lib/python3.7/site-packages/urllib3/util/connection.py in create_connection(address, timeout, source_address, socket_options)
     83     if err is not None:
---> 84         raise err
     85 

/usr/local/lib/python3.7/site-packages/urllib3/util/connection.py in create_connection(address, timeout, source_address, socket_options)
     73                 sock.bind(source_address)
---> 74             sock.connect(sa)
     75             return sock

ConnectionRefusedError: [Errno 111] Connection refused


During handling of the above exception, another exception occurred:

NewConnectionError                        Traceback (most recent call last)
/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    666             if is_new_proxy_conn:
--> 667                 self._prepare_proxy(conn)
    668 

/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py in _prepare_proxy(self, conn)
    931         conn.set_tunnel(self._proxy_host, self.port, self.proxy_headers)
--> 932         conn.connect()
    933 

/usr/local/lib/python3.7/site-packages/urllib3/connection.py in connect(self)
    308         # Add certificate verification
--> 309         conn = self._new_conn()
    310         hostname = self.host

/usr/local/lib/python3.7/site-packages/urllib3/connection.py in _new_conn(self)
    171             raise NewConnectionError(
--> 172                 self, "Failed to establish a new connection: %s" % e
    173             )

NewConnectionError: <urllib3.connection.HTTPSConnection object at >: Failed to establish a new connection: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

MaxRetryError                             Traceback (most recent call last)
/usr/local/lib/python3.7/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    448                     retries=self.max_retries,
--> 449                     timeout=timeout
    450                 )

/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    766                 body_pos=body_pos,
--> 767                 **response_kw
    768             )

/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    766                 body_pos=body_pos,
--> 767                 **response_kw
    768             )

/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    766                 body_pos=body_pos,
--> 767                 **response_kw
    768             )

/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    726             retries = retries.increment(
--> 727                 method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
    728             )

/usr/local/lib/python3.7/site-packages/urllib3/util/retry.py in increment(self, method, url, response, error, _pool, _stacktrace)
    438         if new_retry.is_exhausted():
--> 439             raise MaxRetryError(_pool, url, error or ResponseError(cause))
    440 

MaxRetryError: HTTPSConnectionPool(host='graph.microsoft.com', port=443): Max retries exceeded with url: (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at >: Failed to establish a new connection: [Errno 111] Connection refused')))