Не работает запрос подключения к FTPS

Azazel

Новичок
Пользователь
Мар 21, 2025
4
0
1
Добрый день!
Я новичок и только разбираюсь в Python. Есть задача: подключиться к серверу (FTPS) и перекинуть туда файл из директории. И у меня проблемы уже на этапе подключения(( Облазила весь интернет, но ничего из найденного не работает. Попросила коллегу и он скинул часть своего кода, но он у меня тоже почему-то не работает. Что не так?
Вот код:
Python:
import os
import logging
from dotenv import load_dotenv
import time
from ftplib import FTP_TLS
import ssl

# Параметры подключения
host = os.getenv("FTPS_HOST")
port = 21
username = os.getenv("FTPS_USERNAME")
password = os.getenv("FTPS_PASSWORD")

# Создаем SSL контекст
context = ssl.create_default_context()

# !!!ВАЖНО- устанавливаем набор шифров по умолчанию с уровнем безопасности 2
context.set_ciphers("DEFAULT@SECLEVEL=2")

# Настройка логирования
logging.basicConfig(
    filename="ftps_upload.log",  # Логи будут записываться в файл ftps_upload.log
    level=logging.INFO,  # Уровень логирования INFO
    format="%(asctime)s - %(levelname)s - %(message)s",  # Формат записи логов
)
logger = logging.getLogger()

# Функция для подключения к FTPS-серверу с повторными попытками
def connect_to_ftps(host, port, username, password, retries=3, delay=5):
    for attempt in range(retries):
        try:
            ftps = FTP_TLS(context=context)
            ftps.connect(host, port)  # Указываем хост и порт
            ftps.login(username, password)  # Авторизация
            logger.info("Подключение к серверу успешно установлено.")
            print("Подключение к серверу успешно установлено.")
            return ftps
        except Exception as e:
            logger.error(f"Попытка {attempt + 1} из {retries} не удалась: {e}")
            print(f"Попытка {attempt + 1} из {retries} не удалась: {e}")
            if attempt < retries - 1:
                time.sleep(delay)  # Ждем перед следующей попыткой
            logger.error("Не удалось установить подключение к серверу.")
            print("Не удалось установить подключение к серверу.")
            return None

По логике в консоли должно выводится "Подключение к серверу успешно установлено", но не выводиться. Код просто отрабатывает в пустую. В чем может быть проблема?1742552817855.png
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
464
128
43
Я новичок и только разбираюсь в Python.
скорее всего проблема только в этом.

Что ты знаешь на данный момент о функциях? Что происходит когда функция определяется и когда вызывается?
 

Azazel

Новичок
Пользователь
Мар 21, 2025
4
0
1
скорее всего проблема только в этом.

Что ты знаешь на данный момент о функциях? Что происходит когда функция определяется и когда вызывается?
Намек поняла. Сделала вызов функции внизу. Выдало ошибку((1742563291954.png
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
464
128
43
ну winerror 10061 может возникать из-за кучи причин, начиная от банального несоответствия порта и заканчивая настройками сертификатов. Кто знает? может у вас фаервол блочит или на сервере.
 

Azazel

Новичок
Пользователь
Мар 21, 2025
4
0
1
ну winerror 10061 может возникать из-за кучи причин, начиная от банального несоответствия порта и заканчивая настройками сертификатов. Кто знает? может у вас фаервол блочит или на сервере.
Значит проблема не в коде. А как можно выяснить на что именно ругается запрос, чтобы это исправить или найти обход?
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
464
128
43
Если загуглить winerror 10061, то становится понятно, что целевой сервер отверг соединение или сервер недоступен.
Через FileZilla подключение происходит?
 

Azazel

Новичок
Пользователь
Мар 21, 2025
4
0
1
Если загуглить winerror 10061, то становится понятно, что целевой сервер отверг соединение или сервер недоступен.
Через FileZilla подключение происходит?
Да, через Fillezilla все подключается
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
464
128
43
а хостер предоставил сертификат публичного ключа? Вообще зачем подключаться через FTP_TLS и указывать проверку подлинности сертификата через список доверенных корневых сертификатов? Если хостер использует свой самоподписаный сертификат, то его и указывать нужно. Иначе используй обычный класс FTP()...
 

Форум IT Специалистов