2017-04-06 19 views
0
from ftplib import FTP_TLS 
import socket 
import ssl 

class tyFTP(FTP_TLS): 
    def __init__(self, host='', user='', passwd='', acct='', keyfile=None, certfile=None, timeout=60): 
     FTP_TLS.__init__(self, host, user, passwd, acct, keyfile, certfile, timeout) 
    def connect(self, host='', port=0, timeout=-999): 
     if host != '': 
      self.host = host 
     if port > 0: 
      self.port = port 
     if timeout != -999: 
      self.timeout = timeout 

     try: 
      self.sock = socket.create_connection((self.host, self.port), self.timeout) 
      self.af = self.sock.family 
      self.sock = ssl.wrap_socket(self.sock, self.keyfile, self.certfile, ssl_version=ssl.PROTOCOL_TLSv1) 
      self.file = self.sock.makefile('rb') 
      self.welcome = self.getresp() 
     except Exception as e: 
      print e 
     return self.welcome 

# FTP_ROOT_PATH = "/outgoing/" 
FTP_SITE = "..." 
# FTP_SITE = "..." 
FTP_PORT = 990 

UPLOAD = { 
    "USERNAME": "...", 
    "PASSWORD": "..." 
} 

DOWNLOAD = { 
    "USERNAME": "...", 
    "PASSWORD": "..." 
} 

remote_file = "..." 
local_filepath = "..." 

server = tyFTP() 
server.connect(host=FTP_SITE, port=990) 
server.login(user=DOWNLOAD['USERNAME'], passwd=DOWNLOAD['PASSWORD']) 
server.prot_p() 
server.retrbinary("RETR " + remote_file, open(local_filepath, "wb").write) 

この投稿から既にコードをコピーしましたPython FTP implicit TLS connection issue。私はコード内で起こっているすべてのことをよく理解していますが、エラーで完全に失われています。問題は、私がretrbinary関数を呼び出すときに最後の行まですべてを実行できることです。私はエラーを取得しています:AttributeErrorを取得するPython FTP_TLSオブジェクトを使用してファイルをダウンロードしようとしていますか?

AttributeError: 'int' object has no attribute 'wrap_socket' 

は完全なエラーダイアログがある:

File "sample.py", line 48, in <module> 
server.retrbinary("RETR " + remote_file, open(local_filepath, "wb").write) 
File "C:\Users\Alex\Anaconda2\lib\ftplib.py", line 718, in retrbinary 
conn = self.transfercmd(cmd, rest) 
File "C:\Users\Alex\Anaconda2\lib\ftplib.py", line 376, in transfercmd 
return self.ntransfercmd(cmd, rest)[0] 
File "C:\Users\Alex\Anaconda2\lib\ftplib.py", line 712, in ntransfercmd 
conn = self.context.wrap_socket(conn, 
AttributeError: 'int' object has no attribute 'wrap_socket' 

誰が犯人が何であるか上の任意の洞察力を持っていますか?

+0

あなたはコード全体を知っていますか? 'FTP_TLS'のように見えます... – CristiFati

答えて

2

(intです)タイムアウト引数のご利用は、この行のコンテキスト変数の代わりに、次のとおりです。

FTP_TLS.__init__(self, host, user, passwd, acct, keyfile, certfile, timeout) 

は次のようになります。

FTP_TLS.__init__(self, host, user, passwd, acct, keyfile, certfile, context, timeout) 

参照: https://docs.python.org/2/library/ftplib.html

+1

完全に作業しました。どうもありがとうございました。 –

関連する問題