Python 3.x python3 ftplib SSLEOFError(8,';EOF违反了协议(_ssl.c:645)和#x27;)

Python 3.x python3 ftplib SSLEOFError(8,';EOF违反了协议(_ssl.c:645)和#x27;),python-3.x,ssl,ftp,Python 3.x,Ssl,Ftp,您好,我正在尝试使用被动模式和显式tls从一个简单的ftp文件zilla服务器执行简单的读写文件,我的设置可以很好地与他们的文件zilla客户端配合使用。在阅读或写作时,我不知道如何解决这个错误。执行mkdir等其他操作的命令也可以很好地工作 >>> from ftplib import FTP_TLS >>> import subprocess >>> import io >>> import os >>>

您好,我正在尝试使用被动模式和显式tls从一个简单的ftp文件zilla服务器执行简单的读写文件,我的设置可以很好地与他们的文件zilla客户端配合使用。在阅读或写作时,我不知道如何解决这个错误。执行mkdir等其他操作的命令也可以很好地工作

>>> from ftplib import FTP_TLS
>>> import subprocess
>>> import io
>>> import os
>>> import sys
>>> from datetime import datetime, date, time
>>> from os.path import basename
>>> local_filename = os.path.join(os.getcwd(), 'KansasCityTestData.csv')
>>> print(local_filename)
/var/www/KansasCityTestData.csv
>>> myfile = open(local_filename, 'wb')
>>> myfile
<_io.BufferedWriter name='/var/www/KansasCityTestData.csv'>
>>> command = 'RETR /%s' % 'KansasCityTestData.csv'
>>> command
'RETR /KansasCityTestData.csv'
>>> ftp = FTP_TLS('111.111.111.111') #except my real info
>>> ftp.login('myuser', 'mypass')
'230 Logged on'
>>> ftp.prot_p()
'200 Protection level set to P'
>>> ftp.set_pasv(True)
>>> ftp.retrbinary(command, myfile.write)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/usr/lib/python3.5/ftplib.py", line 441, in retrbinary
with self.transfercmd(cmd, rest) as conn:
  File "/usr/lib/python3.5/ftplib.py", line 398, in transfercmd
    return self.ntransfercmd(cmd, rest)[0]
  File "/usr/lib/python3.5/ftplib.py", line 796, in ntransfercmd
    server_hostname=self.host)
  File "/usr/lib/python3.5/ssl.py", line 377, in wrap_socket
    _context=self)
  File "/usr/lib/python3.5/ssl.py", line 752, in __init__
    self.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 988, in do_handshake
    self._sslobj.do_handshake()
  File "/usr/lib/python3.5/ssl.py", line 633, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:645)
>>从ftplib导入FTP\u TLS
>>>导入子流程
>>>输入io
>>>导入操作系统
>>>导入系统
>>>从日期时间导入日期时间、日期、时间
>>>从os.path导入basename
>>>local_filename=os.path.join(os.getcwd(),'KansasCityTestData.csv')
>>>打印(本地文件名)
/var/www/KansasCityTestData.csv
>>>myfile=open(本地文件名'wb')
>>>我的文件
>>>命令='RETR/%s''%KansasCityTestData.csv'
>>>命令
'RETR/KansasCityTestData.csv'
>>>ftp=ftp_TLS('111.111.111.111')#除了我的真实信息
>>>ftp.login('myuser','mypass')
“230已登录”
>>>ftp.prot_p()
“200保护级别设置为P”
>>>ftp.set_pasv(真)
>>>ftp.retrbinary(命令,myfile.write)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python3.5/ftplib.py”,第441行,在retrbinary中
使用self.transfercmd(cmd,rest)作为连接:
文件“/usr/lib/python3.5/ftplib.py”,第398行,在transfercmd中
返回self.ntransfercmd(cmd,rest)[0]
ntransfercmd中的文件“/usr/lib/python3.5/ftplib.py”,第796行
服务器(主机名=self.host)
文件“/usr/lib/python3.5/ssl.py”,第377行,在wrap_套接字中
_上下文=自身)
文件“/usr/lib/python3.5/ssl.py”,第752行,在__
self.do_握手
文件“/usr/lib/python3.5/ssl.py”,第988行,在do_握手中
赛尔夫:握手
文件“/usr/lib/python3.5/ssl.py”,第633行,在do_握手中
赛尔夫:握手
ssl.ssleof错误:EOF违反了协议(_ssl.c:645)

我正在ubuntu 16.04上使用python3.5.2。我已经看过很多关于cimilar的问题,但似乎不适用于ftp。我所能找到的就是python3支持显式tls。非常感谢您的帮助。

因此我找到了答案,而这个答案在我能找到的任何其他线索中都没有。我们发现服务器为被动连接启用了tls会话重用,直到python3.6才支持这种重用。所以我关闭了这个要求,它工作得很好。在filezilla中,它被称为
“使用prot_p时需要在数据连接上恢复TLS会话”。

因此我找到了答案,而这个答案在任何其他线程中都没有。我们发现服务器为被动连接启用了tls会话重用,直到python3.6才支持这种重用。所以我关闭了这个要求,它工作得很好。在filezilla中,它被称为 “使用prot_p时,需要在数据连接上恢复TLS会话”