我试图连接到FTP站点下载一些文件:
from ftplib import FTP_TLS
from ftplib import FTP
import ssl
import ftplib
FTP_TLS.ssl_version = ssl.PROTOCOL_TLSv1_2
ftps = FTP_TLS(timeout=100)
ftps.set_debuglevel(2)
ftps.connect('IP', port)
ftps.auth()
ftps.prot_p()
ftps.login('username', 'password')程序在失败之前尝试一段时间,但有以下错误:
获取'‘跟踪(最近一次调用):文件"FTP.py",第12行,在ftps.connect('IP',端口)文件"C:_data\learn\Miniconda\lib\ftplib.py“中,第155行,在connect self.welcome = self.getresp() File "C:_data\learn\Miniconda\lib\ftplib.py”中,第236行,在getresp resp = self.getmultiline() File "C:_data\learn\Miniconda\lib\ftplib.py“中,第222行,在getmultiline = self.getline() File "C:_data\learn\Miniconda\lib\ftplib.py“中,第210行中,getline中的EOFError EOFError
我不知道造成这个错误的原因是什么。我可以使用与ftp客户端(FileZilla)相同的详细信息连接到FTP服务器。谁能指出我的代码是否有问题,以及修复这个问题的可能选项。
编辑1
如下所示,发布FileZilla日志:
状态:连接IP:端口..。状态:建立连接,初始化TLS.状态:验证证书..。状态: TLS连接建立,等待欢迎信息..。状态:登录状态:检索目录列表.状态:"/“成功目录列表
FIleZilla显式地弹出一个证书,我在桌面上按OK键建立连接。我假设这里的失败是因为我的代码不接受证书。任何帮助都是非常感谢的。
发布于 2019-04-30 02:09:44
对于任何寻找答案的人来说,问题是隐式FTPS连接需要将套接字自动包装起来。
import ftplib
import ssl
class ImplicitFTP_TLS(ftplib.FTP_TLS):
"""FTP_TLS subclass that automatically wraps sockets in SSL to support implicit FTPS."""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._sock = None
@property
def sock(self):
"""Return the socket."""
return self._sock
@sock.setter
def sock(self, value):
"""When modifying the socket, ensure that it is ssl wrapped."""
if value is not None and not isinstance(value, ssl.SSLSocket):
value = self.context.wrap_socket(value)
self._sock = value如果这解决了你的问题,请把原来的答案->https://stackoverflow.com/a/36049814/392233
https://stackoverflow.com/questions/55898077
复制相似问题