0

Python 2.7 を使用して FTP からファイルをダウンロードしようとしています。Windows XP の場合

FTPに接続できますが、次のエラーが発生します

[Errno 10054] 既存の接続がリモート ホストによって強制的に閉じられました

以下は私のコードです。

import os
from time import strftime
from ftplib import FTP

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders


def ftp_connect(path):
    link = FTP(host = 'myservername', timeout = 5) #Keep low timeout
    link.login(passwd = 'mypassword', user = 'myusername')
    debug("%s - Connected to FTP" % strftime("%d-%m-%Y %H.%M"))
    link.cwd(path)
    return link

def writeline(line):
    file.write(line + "\n")


downloaded = open('myfile.txtx', 'wb')

def debug(txt):
    print txt

path="mydir"
filename="myfilename"

link = ftp_connect(path)
file_size = link.size(filename)

max_attempts = 5 #I dont want death loops.

while file_size != downloaded.tell():
    try:
        debug("%s while > try, run retrbinary\n" % strftime("%d-%m-%Y %H.%M"))
        if downloaded.tell() != 0:
            link.retrbinary('RETR ' + filename, downloaded.write, downloaded.tell())
        else:
            link.retrbinary('RETR ' + filename, downloaded.write)
    except Exception as myerror:
        if max_attempts != 0:
            debug("%s while > except, something going wrong: %s\n \tfile lenght is: %i > %i\n" %
                (strftime("%d-%m-%Y %H.%M"), myerror, file_size, downloaded.tell())
            )
            link = ftp_connect(path)
            max_attempts -= 1
        else:
            break
debug("Done with file, attempt to download m5dsum")

FTPにログインするために個別にテストし、成功しました。しかし、retrbinary や retrlist などのコマンドを実行すると、上記のエラーが発生します

前もって感謝します

4

1 に答える 1

1

FTPS には diff の実装が必要なため

以下のコード行を使用して問題を解決します

ftps = FTP_TLS(server)
ftps.debug(3)
ftps.connect(host=server,port=portno,timeout=60)
ftps.auth()
ftps.login(username, password )
ftps.prot_p()

最初に ftps サーバーに接続してから、auth() と prot_p() でログインします。

于 2012-10-12T12:35:14.687 に答える