そのため、FTP サーバーに接続してディレクトリ リストを取得し、ファイルをダウンロードしようとしています。prot_p()
ただし、関数の後の最初のコマンドは例外を発生させます-ログからこれらのエラーを生成します:
*get* '150 Here comes the directory listing.\r\n'
*resp* '150 Here comes the directory listing.'
*get* '522 SSL connection failed; session reuse required: see require_ssl_reuse
option in vsftpd.conf man page\r\n'
*resp* '522 SSL connection failed; session reuse required: see require_ssl_reuse
option in vsftpd.conf man page'
Traceback (most recent call last):
File "C:\temp\download.py", line 29, in <module>
files = ftps.dir()
File "C:\Python27\lib\ftplib.py", line 522, in dir
self.retrlines(cmd, func)
File "C:\Python27\lib\ftplib.py", line 725, in retrlines
return self.voidresp()
File "C:\Python27\lib\ftplib.py", line 224, in voidresp
resp = self.getresp()
File "C:\Python27\lib\ftplib.py", line 219, in getresp
raise error_perm, resp
ftplib.error_perm: 522 SSL connection failed; session reuse required: see requir
e_ssl_reuse option in vsftpd.conf man page
コードは次のとおりです。
from ftplib import FTP_TLS
import os
import socket
host = 'example.com'
port = 34567
user = 'user1'
passwd = 'pass123'
acct = 'Normal'
ftps = FTP_TLS()
ftps.set_debuglevel(2)
ftps.connect(host, port)
print(ftps.getwelcome())
print(ftps.sock)
ftps.auth()
ftps.login(user, passwd, acct)
ftps.set_pasv(True)
ftps.prot_p()
print('Current directory:')
print(ftps.pwd())
files = ftps.dir()
ftps.quit()
これを安全に行いたいので、FTP over TLS Explicit を使用します。Socket
ftplib が参照するクラスのいくつかの設定を操作する必要があるかもしれないという考えがあります。サーバーの設定を変更することはできません。FileZilla クライアントでサーバーを正常にテストしましたが、古いバージョンの WinSCP で同じエラーが発生していましたが、最新バージョンへのアップグレードで修正されました。
何か案は?