質問

FTPLIBを使用してファイルリストを取得し、最後のチェック以来新しいファイルをダウンロードしようとしています。私がこれまでに実行しようとしているコードは次のとおりです。

#!/usr/bin/env python
from ftplib import FTP
import sys

host = 'ftp.***.com'
user = '***'
passwd = '***'

try:
    ftp = FTP(host)
    ftp.login(user, passwd)
except:
    print 'Error connecting to FTP server'
    sys.exit()

try:
    ftp.retrlines('LIST')
except:
    print 'Error fetching file listing'
    ftp.quit()
    sys.exit()

ftp.quit() 

これを実行するたびに、リスティングを取得しようとするときはいつでも出ます。何か案は?

役に立ちましたか?

解決

おそらく、アクティブモードとパッシブモードの間の競合です。次のいずれかが真であることを確認してください。

  1. サーバーはPASVモードをサポートし、クライアントがPASVモードを設定しています
  2. サーバーがパッシブモードをサポートしていない場合、ファイアウォールはアクティブモードFTP転送をサポートする必要があります。

編集:ドキュメントを見て、Python 2.1以降ではデフォルトがパッシブモードであることがわかりました。どのサーバーと話しているのか、パッシブモードをサポートしているかどうかを知っていますか?

アクティブモード(非PASV)では、クライアントはポートコマンドを送信し、サーバーにそのポートのデータ接続を開始するようにサーバーに送信します。これにより、ファイアウォールはポートコマンドに注意する必要があります。これをサポートします。パッシブモードでは、クライアントがデータ接続を開き、サーバーはそれを使用します(サーバーはデータ接続を開く際に「パッシブ」です)。

パッシブモードを使用していない場合に備えて、 ftp.set_pasv(True) そして、それが違いを生むかどうかを確認します。

他のヒント

何らかの理由でパッシブモードが失敗している場合は、次のことを試してください。

ftp.set_pasv(False)

アクティブモードを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top