Почему Firebase стала возвращать requests.exceptions.ConnectionError: HTTPSConnectionPool?
Такая вот проблема: есть у меня приложение, которое использует Real Time Data Base от Firebase. Все отлично работало до недавних пор. Буквально неделю назад стали вываливаться requests.exceptions.ConnectionError: HTTPSConnectionPool. При любых запросах к базе, но через раз. Иногда данные возвращаются, иногда - нет. Причем, проблема возникла в Казахстане (мое приложение работает именно там). В Ростове, например, программа продолжает работать без ошибок. Я уже и таймаут запроса увеличил:
self.app = firebase_admin.initialize_app(
self.credentials,
{
...,
"httpTimeout": 320,
},
)
И хедеры добавил в запрос:
HEADER = {
"User-Agent": "Mozilla/5.0 "
"(Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/70.0.3538.77 Safari/537.36"
}
Но вот такие ошибки продолжают сыпаться через раз:
requests.exceptions.ConnectionError: HTTPSConnectionPool(
host='name-base.firebaseio.com', port=443):
Max retries exceeded with url: /name-base/Path/To/Data.json (
Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000021F1779F310>:
Failed to establish a new connection: [WinError 10060]
попытка установить соединение была безуспешной,
т.к. от другого компьютера за требуемое время не получен нужный отклик,
или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера'))
Причем, если отловить в ветке except исключение и снова послать запрос, то повторный запрос вернет данные:
def get_request(self, date_request: str) -> NoReturn:
try:
self.real_time_firebase.get_request(
f"{self.type_base}/{self.name_base_registry}",
date_request,
headers=HEADER,
)
except requests.exceptions.ConnectionError:
self.get_request(date_request)
Нижеследующий код:
import requests
from firebase import firebase
class Base:
def __init__(self):
self.real_time_firebase = firebase.FirebaseApplication(
"https://loginappmvc-5a4aa-default-rtdb.firebaseio.com/", None
)
self.type_base = "UserData"
self.name_base_users = "LoginsPasswords"
def get_data_from_base_users(self):
try:
data = self.real_time_firebase.get(self.type_base, self.name_base_users)
except requests.exceptions.ConnectionError:
return None
return data
base = Base()
for i in range(20):
print(base.get_data_from_base_users())
... отрабатывает все запросы в Луганске:
Но тот же код, запущенный из Казахстана, пять раз падает с ConnectionError:
Кто знает, что могло случится?
Ответы (1 шт):
Если кому интересно, проблема решилась путем переноса базы данных с сервера США на сервер Сингапура

