Domanda

Sto cercando di utilizzare ftplib per ottenere un elenco di file e scaricare nuovi file dal mio ultimo assegno. Il codice che sto cercando di eseguire finora è:

#!/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() 

Ogni volta che corro questo timeout quando cerco di recuperare l'elenco. Tutte le idee?

È stato utile?

Soluzione

Molto probabilmente un conflitto tra la modalità attiva e passiva. Assicurarsi che una delle seguenti condizioni:

  1. I server supporta modalità PASV e il client è impostazione della modalità PASV
  2. Se il server non supporta la modalità passiva, quindi il firewall deve supportare trasferimenti FTP in modalità attiva.

EDIT: ho guardato la documentazione, e ha scoperto che in Python 2.1 e versioni successive il valore predefinito è la modalità passiva. Quale server stai parlando, e di non si sa se supporta la modalità passiva?

In modalità attiva (non PASV) il client invia un comando PORT dire al server per avviare la connessione DATI su quella porta, che richiede il firewall essere consapevoli del comando PORT in modo che possa inoltrare la connessione di dati in entrata a voi - - alcuni firewall supportano questa. Nella modalità passiva il client apre la connessione dati e il server utilizza (il server è "passivo" ad aprire la connessione dati).

Nel caso in cui non si sta usando la modalità passiva, fare un ftp.set_pasv(True) e vedere se questo fa la differenza.

Altri suggerimenti

Se la modalità passiva non riesce per qualche motivo try:

ftp.set_pasv(False)

per utilizzare la modalità attiva.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top