Форум сайта python.su
Добрый день! Я только начала разбираться в 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)
Прикреплённый файлы: Скриншот 22-03-2025 185344.jpg (72,4 KБ)
Офлайн
Azazel1. Совет по поводу сертификатов считаю заслуживающим внимания.
ПОМОГИТЕ, ПОЖАЛЙСТА!!!
Существуют две реализации FTPS, использующие различные методы предоставления безопасности:А у вас FTPS современный или устаревший?
Неявный метод предполагает использование стандартного протокола SSL с установлением сессии перед отправкой данных, что, в свою очередь, нарушает совместимость с обычным FTP клиентами и серверами. Для обратной совместимости с клиентами, которые не поддерживают FTPS, для контрольного соединения используется TCP-порт 990, а для передачи данных — 989. Это позволяет сохранить стандартный порт 21 для протокола FTP. Данный метод признан устаревшим.
Явный – намного более удобен, так как использует команды стандартного FTP, но при ответе шифрует данные, что позволяет использовать одно и тоже управляющее соединение как для FTP, так и для FTPS. Клиент должен явно запросить защищенную передачу данных у сервера, а после утвердить способ шифрования. Если клиент не запросит защищенную передачу, FTPS сервер вправе как сохранить, так и закрыть незащищенное соединение.
Отредактировано Alex.Pro. (Март 22, 2025 23:55:34)
Офлайн
AzazelКогда код выдаёт ошибку, первым делом нужно прочитать, что это за ошибка. У вас из-за кодировки в консоли знаки вопроса вместо символов.
Но у меня проблемы уже на уровне подключения. Выдает ошибку
Офлайн
xam1816, похоже что Азазела, хотя и не смогла настроить локаль в русской Винде, описание ошибки по её коду уже нагуглила: “ConnectionRefusedError: WinError 10061 Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение”. По нагугленным советам она уже попробовала подключаться через FilleZilla (если через FilleZilla подключение происходит нормально, значит с сертификатом сервера нет проблем?), и прокси проверяла. Хотя надо было проверять не прокси, а брендмауэр. И попробовать отключить антивирус.
А насчёт временного отключения блока try/except - совет разумный. Ну да ладно, подождём когда девушка даст дополнительную информацию.
Отредактировано Alex.Pro. (Март 23, 2025 10:48:44)
Офлайн
AzazelНадо сделать новый скрипт и написать туда только пару строк, которые выполняют только подключение. Не надо сразу весь скрипт писать. Когда подключение отлажено, тогда уже можно вставлять его в общий скрипт, чтобы оно там происходило аналогичным образом. И так делается каждый шаг во всей этой процедуре по выгрузке файла - по отдельности.
Но у меня проблемы уже на уровне подключения.
AzazelЭто не питон, это незнание программирования и его правил. То есть при полном изучении питона на тебя не снизойдёт никакое озарение и автоматическое узнавание всех приёмов, принципов и правил программирования. Это как при полном изучении карандаша ты всё так же не будешь знать, как им нарисовать что-то вменяемое типа кошки там или пейзажа. Одного карандаша маловато для этого.
Я только начала разбираться в Python
Отредактировано py.user.next (Март 25, 2025 04:19:35)
Офлайн