Python 3.6 ftps file download - SSLEOFError: EOF occurred in violation of protocol (_ssl.c:841)
Python 3.6 ftps file download - SSLEOFError: EOF occurred in violation of protocol (_ssl.c:841)
我正在尝试编写一个脚本,每隔一段时间就会转到 Filezilla 服务器以检索文件。我对 Filezilla 服务器和配置拥有管理权限,但对系统或网络的其余部分没有管理权限,但可以提出请求。
代码:
from ftplib import FTP_TLS
host="11.211.171.41"
ftps = FTP_TLS(host)
ftps.login()
ftps.prot_p()
ftps.dir()
#-r--r--r-- 1 ftp ftp 5636096 Aug 07 00:50 master.mdf
#-r--r--r-- 1 ftp ftp 2097152 Aug 07 00:50 mastlog.ldf
filename = "master.mdf"
with open(filename, 'wb') as f:
ftps.retrbinary('RETR {}'.format(filename), f.write)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/fcontreras/scripts/ftps/ftps.py", line 29, in get
ftps.retrbinary('RETR {}'.format(filename), f.write)
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ftplib.py", line 442, in retrbinary
with self.transfercmd(cmd, rest) as conn:
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ftplib.py", line 399, in transfercmd
return self.ntransfercmd(cmd, rest)[0]
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ftplib.py", line 801, in ntransfercmd
server_hostname=self.host)
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ssl.py", line 407, in wrap_socket
_context=self, _session=session)
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ssl.py", line 814, in __init__
self.do_handshake()
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ssl.py", line 1068, in do_handshake
self._sslobj.do_handshake()
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ssl.py", line 689, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:841)
所以重点是修复错误,但我很难找出 (_ssl.c:841) 的意思,我不确定从哪里开始寻找。
发现问题,SSLEOFError 具有误导性,错误是因为数据库不可读。
一开始我没有检查这个,因为权限显示为:
#-r--r--r-- 1 ftp ftp 5636096 Aug 07 00:50 master.mdf
#-r--r--r-- 1 ftp ftp 2097152 Aug 07 00:50 mastlog.ldf
它们似乎由创建它们的数据库引擎永久打开,并且 windows 不允许用户或 FTP 服务器读取要传输的文件。
希望这将有助于减少 google 某人的时间。
我正在尝试编写一个脚本,每隔一段时间就会转到 Filezilla 服务器以检索文件。我对 Filezilla 服务器和配置拥有管理权限,但对系统或网络的其余部分没有管理权限,但可以提出请求。
代码:
from ftplib import FTP_TLS
host="11.211.171.41"
ftps = FTP_TLS(host)
ftps.login()
ftps.prot_p()
ftps.dir()
#-r--r--r-- 1 ftp ftp 5636096 Aug 07 00:50 master.mdf
#-r--r--r-- 1 ftp ftp 2097152 Aug 07 00:50 mastlog.ldf
filename = "master.mdf"
with open(filename, 'wb') as f:
ftps.retrbinary('RETR {}'.format(filename), f.write)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/fcontreras/scripts/ftps/ftps.py", line 29, in get
ftps.retrbinary('RETR {}'.format(filename), f.write)
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ftplib.py", line 442, in retrbinary
with self.transfercmd(cmd, rest) as conn:
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ftplib.py", line 399, in transfercmd
return self.ntransfercmd(cmd, rest)[0]
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ftplib.py", line 801, in ntransfercmd
server_hostname=self.host)
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ssl.py", line 407, in wrap_socket
_context=self, _session=session)
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ssl.py", line 814, in __init__
self.do_handshake()
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ssl.py", line 1068, in do_handshake
self._sslobj.do_handshake()
File "/home/fcontreras/miniconda3/envs/ftp/lib/python3.6/ssl.py", line 689, in do_handshake
self._sslobj.do_handshake()
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:841)
所以重点是修复错误,但我很难找出 (_ssl.c:841) 的意思,我不确定从哪里开始寻找。
发现问题,SSLEOFError 具有误导性,错误是因为数据库不可读。
一开始我没有检查这个,因为权限显示为:
#-r--r--r-- 1 ftp ftp 5636096 Aug 07 00:50 master.mdf
#-r--r--r-- 1 ftp ftp 2097152 Aug 07 00:50 mastlog.ldf
它们似乎由创建它们的数据库引擎永久打开,并且 windows 不允许用户或 FTP 服务器读取要传输的文件。
希望这将有助于减少 google 某人的时间。