Python 3.8,5 FTPS-соединение - PullRequest
       193

Python 3.8,5 FTPS-соединение

0 голосов
/ 06 августа 2020

Я пытаюсь установить соединение FTPS (или FTP) с FTP-сервером. Это делается на Python 3.8.5 32 бит через Visual Studio Code.

Вот код:

import ftplib
session = ftplib.FTP_TLS('server address')
#session.connect ('server address', 991)
session.login(user='username',passwd='password')
#session.prot_p()
session.set_pasv(True)
session.cwd("files")
print(session.pwd())
filename = "ftpTest.txt"
my_file = open('filepath\\ftpTest.txt', 'wb') # Open a local file to store the downloaded file
session.retrbinary('RETR ' + filename, my_file.write, 1024)

session.quit()

Я могу получить session.pwd (который отображает / files), но тайм-аут соединения в строке 11 (session.retrbinary) примерно через 22 секунды c со следующей ошибкой:

Exception has occurred: TimeoutError
[WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

Я попытался установить session.set_pasv как True, так и False после Python таймаут ftplib . Значение True вызывает ошибку TimeoutError, а значение False вызывает следующую ошибку в строке 11:

Exception has occurred: error_perm
500 Illegal PORT command

, а также пытается установить другой порт (991) после Python Тайм-аут SSL FTP-соединения и возникла ошибка тайм-аута в строке 3.

Использование FTP без TLS вызвало следующую ошибку в строке 4 (session.login):

Exception has occurred: error_perm
530 Non-anonymous sessions must use encryption.

Отключение брандмауэра McAfee LiveSafe тоже не помогло. Кстати, передача файлов работает с Filezilla, можно было свободно передавать.

1 Ответ

0 голосов
/ 12 августа 2020

Мне показалось, что установка безопасного соединения для передачи данных и изменение сеанса af на INET6 сработали. Это было предложено мне коллегой, и я не понимаю, почему это работает. Если кто-нибудь может дать правильное объяснение, сделайте это.

Код:

session.login(user='username',passwd='password')
session.prot_p()
session.af = socket.AF_INET6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...