Уведомления

Группа в Telegram: @pythonsu

#1 Март 22, 2025 17:54:25

Azazel
Зарегистрирован: 2025-03-22
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Не получается подключиться к FTPS

Добрый день! Я только начала разбираться в Python, поэтому сильно не бейте)) Задача6 надо подключиться к серверу (FTPS) и скинуть туда файл из директории. Но у меня проблемы уже на уровне подключения. Выдает ошибку . Я уже и логин/пароль проверила (через FilleZilla все заходит нормально), и OpenSSL установила, прокси свой проверила (нет его, автоматический). Что не так? Что мне ещё сделать, чтобы код заработал и сервер меня не разворачивал прямо на входе?! Пробовала разные запросы и везде утыкаюсь в одну и ту же ошибку. ПОМОГИТЕ, ПОЖАЛЙСТА!!!
Вот код:

 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
connect_to_ftps(host, port, username, password)

Прикреплённый файлы:
attachment Скриншот 22-03-2025 185344.jpg (72,4 KБ)

Офлайн

#2 Март 22, 2025 23:53:53

Alex.Pro.
От: Марик
Зарегистрирован: 2024-11-13
Сообщения: 77
Репутация: +  2  -
Профиль   Отправить e-mail  

Не получается подключиться к FTPS

Azazel
ПОМОГИТЕ, ПОЖАЛЙСТА!!!
1. Совет по поводу сертификатов считаю заслуживающим внимания.
2. Я не вижу как и какой URL получает ваш код. Может до окончания отладки URL вшить в код жёстко (сразу после строки host = os.getenv(“FTPS_HOST”)?
3. Меня смущает что
Существуют две реализации FTPS, использующие различные методы предоставления безопасности:
Неявный метод предполагает использование стандартного протокола SSL с установлением сессии перед отправкой данных, что, в свою очередь, нарушает совместимость с обычным FTP клиентами и серверами. Для обратной совместимости с клиентами, которые не поддерживают FTPS, для контрольного соединения используется TCP-порт 990, а для передачи данных — 989. Это позволяет сохранить стандартный порт 21 для протокола FTP. Данный метод признан устаревшим.
Явный – намного более удобен, так как использует команды стандартного FTP, но при ответе шифрует данные, что позволяет использовать одно и тоже управляющее соединение как для FTP, так и для FTPS. Клиент должен явно запросить защищенную передачу данных у сервера, а после утвердить способ шифрования. Если клиент не запросит защищенную передачу, FTPS сервер вправе как сохранить, так и закрыть незащищенное соединение.
А у вас FTPS современный или устаревший?

Отредактировано Alex.Pro. (Март 22, 2025 23:55:34)

Офлайн

#3 Март 23, 2025 09:43:18

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1378
Репутация: +  123  -
Профиль   Отправить e-mail  

Не получается подключиться к FTPS

Azazel
Но у меня проблемы уже на уровне подключения. Выдает ошибку
Когда код выдаёт ошибку, первым делом нужно прочитать, что это за ошибка. У вас из-за кодировки в консоли знаки вопроса вместо символов.

На этапе отладки , можно писать без try except, чтобы была развёрнутая информация об ошибке.

Какая у вас ошибка?

Офлайн

#4 Март 23, 2025 10:46:30

Alex.Pro.
От: Марик
Зарегистрирован: 2024-11-13
Сообщения: 77
Репутация: +  2  -
Профиль   Отправить e-mail  

Не получается подключиться к FTPS

xam1816, похоже что Азазела, хотя и не смогла настроить локаль в русской Винде, описание ошибки по её коду уже нагуглила: “ConnectionRefusedError: WinError 10061 Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение”. По нагугленным советам она уже попробовала подключаться через FilleZilla (если через FilleZilla подключение происходит нормально, значит с сертификатом сервера нет проблем?), и прокси проверяла. Хотя надо было проверять не прокси, а брендмауэр. И попробовать отключить антивирус.
А насчёт временного отключения блока try/except - совет разумный. Ну да ладно, подождём когда девушка даст дополнительную информацию.

Отредактировано Alex.Pro. (Март 23, 2025 10:48:44)

Офлайн

#5 Март 25, 2025 03:44:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9908
Репутация: +  855  -
Профиль   Отправить e-mail  

Не получается подключиться к FTPS

Azazel
Но у меня проблемы уже на уровне подключения.
Надо сделать новый скрипт и написать туда только пару строк, которые выполняют только подключение. Не надо сразу весь скрипт писать. Когда подключение отлажено, тогда уже можно вставлять его в общий скрипт, чтобы оно там происходило аналогичным образом. И так делается каждый шаг во всей этой процедуре по выгрузке файла - по отдельности.

Azazel
Я только начала разбираться в Python
Это не питон, это незнание программирования и его правил. То есть при полном изучении питона на тебя не снизойдёт никакое озарение и автоматическое узнавание всех приёмов, принципов и правил программирования. Это как при полном изучении карандаша ты всё так же не будешь знать, как им нарисовать что-то вменяемое типа кошки там или пейзажа. Одного карандаша маловато для этого.



Отредактировано py.user.next (Март 25, 2025 04:19:35)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version