求python代码!我在win10上用filezilla搭建的FTPS服务器(不是SFTP),默认端口990。要求使用python3 实现FTPS登陆,上传文件,下载文件。试了几天都报错。网上找的代码没有一个不报错的,请问有会的朋友吗?
ps:已尝试过:from ftplib import FTP_TLS 这个模块,几乎百度上所有解决方案,都连接不上,每次都报错。
参考一下:
from ftplib import FTP
ip = '192.168.8.88'
port = 21
def test_ftp():
ftp=FTP()
ftp.connect(ip,port)
ftp.login("ftpuser","123")#如果是匿名登录,直接ftp.login()
files = ftp.dir()
if __name__ == '__main__':
test_ftp()
某些内部线路问题,需要打补丁即可
测试这个,刚刚测试可以的
import ftplib
import socket
import ssl
class ImplicitFTP_TLS(ftplib.FTP_TLS):
def __init__(self, *args, **kwargs):
ftplib.FTP_TLS.__init__(self, *args, **kwargs)
self._sock = None
@property
def sock(self):
return self._sock
@sock.setter
def sock(self, value):
if value is not None and not isinstance(value, ssl.SSLSocket):
value = self.context.wrap_socket(value)
self._sock = value
def ntransfercmd(self, cmd, rest=None):
conn, size = ftplib.FTP.ntransfercmd(self, cmd, rest)
conn = self.sock.context.wrap_socket(
conn, server_hostname=self.host, session=self.sock.session
)
return conn, size
def makepasv(self):
host, port = ftplib.FTP_TLS.makepasv(self)
host = socket.gethostbyname(self.host)
return host, port
s = ImplicitFTP_TLS()
s.connect('127.0.0.1',990,timeout=2)
s.prot_p()
s.login('user','passwd',acct = 'Normal')
s.nlst()
from ftplib import FTP_TLS
_old_makepasv = FTP_TLS.makepasv
def _new_makepasv(self):
host, port = _old_makepasv(self)
host = self.sock.getpeername()[0]
return host, port
FTP_TLS.makepasv = _new_makepasv
ftps = FTP_TLS()
ftps.connect(host="10.31.32.237",port=990)
ftps.auth()
ftps.prot_p() #可能需要
ftps.login('username','xxxxxx')
ftps.nlst()
ftps.close()
"C:\Program Files\Python39\python.exe" C:/Users/ZTGF/PycharmProjects/pythonProject1/TEST/test2.py
Traceback (most recent call last):
File "C:\Users\ZTGF\PycharmProjects\pythonProject1\TEST\test2.py", line 13, in
ftps.connect(host="10.31.32.237",port=990)
File "C:\Program Files\Python39\lib\ftplib.py", line 162, in connect
self.welcome = self.getresp()
File "C:\Program Files\Python39\lib\ftplib.py", line 244, in getresp
resp = self.getmultiline()
File "C:\Program Files\Python39\lib\ftplib.py", line 230, in getmultiline
line = self.getline()
File "C:\Program Files\Python39\lib\ftplib.py", line 218, in getline
raise EOFError
EOFError
兄弟,还是不行哈,报上面的错误
各位老师,https://filezilla-project.org/download.php?type=server
这是filezilla的服务器端,可以在本机上测试好,再把代码发出来吧。坐待答案哈。
各位老师最好是在本地把代码测试好之后再回答,前面给出了很多百度上的解决方案,试了都有报错,不能解决问题。
不能实现连接filezilla 的FTPS,上传文件,下载文件。
ftp可以嘛