Topic: Upload di un file su altervista.org  (Letto 59 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline laschil

  • python unicellularis
  • *
  • Post: 6
  • Punti reputazione: 0
    • Mostra profilo
Upload di un file su altervista.org
« il: Febbraio 14, 2021, 08:15 »
Non mi fa scrivere l'oggetto: FTP
Buongiorno ho la necessità di inviare un file txt sul mio sito postato su altervista.
Ho seguito le indicazioni del tutorial su: https://www.worthwebscraping.com, ebbene se faccio
la prova con il sito: dlptest.com, tutto funziona. Riesco a fare upload ed anche il donwload.
Non appena metto le credenziali del mio sito ricevo questo errore:
****************************************************************************************
Traceback (most recent call last):
  File "C:/ftppy/ftpaiaz.py", line 9, in <module>
    ftp = ftplib.FTP(FTP_HOST, FTP_USER, FTP_PASS)
  File "C:\Program Files\lib\ftplib.py", line 119, in __init__
    self.connect(host)
  File "C:\Program Files\lib\ftplib.py", line 160, in connect
    self.welcome = self.getresp()
  File "C:\Program Files\lib\ftplib.py", line 242, in getresp
    resp = self.getmultiline()
  File "C:\Program Files\lib\ftplib.py", line 228, in getmultiline
    line = self.getline()
  File "C:\Program Files\lib\ftplib.py", line 210, in getline
    line = self.file.readline(self.maxline + 1)
  File "C:\Program Files\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 104: invalid continuation byte
*************************************************************************************************
Il codice da me usato è:
import ftplib 
FTP_HOST = "ftp.aiazzone.altervista.org"
FTP_USER = "aiazzone"
FTP_PASS = "***********"
# connect to the FTP server
ftp = ftplib.FTP(FTP_HOST, FTP_USER, FTP_PASS)
# force UTF-8 encoding
ftp.encoding = "utf-8"
# local file name you want to upload
filename = "file.txt"
with open(filename, "rb") as file:
   # use FTP's STOR command to upload the file
    ftp.storbinary("STOR file.txt", file)
# the name of file you want to download from the FTP server
filename = 'file.txt'
with open(filename, "wb") as file:
    # use FTP's RETR command to download the file
    ftp.retrbinary("RETR file.txt", file.write)
# list current files & directories
ftp.dir()
# quit and close the connection
ftp.quit()

Grazie in anticipo per un eventuale aiuto.
Lanfranco Schillaci
laschil@gmail.com

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 353
  • Punti reputazione: 0
    • Mostra profilo
Re:Upload di un file su altervista.org
« Risposta #1 il: Febbraio 14, 2021, 11:20 »
...
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 104: invalid continuation byte...

Indipendentemente dal codice, la parte evidenziata in rosso mi fa sembrare evidente che sei in presenza di un problema di codifica, probabilmente ciò che tenti di leggere non è codificato in formato utf-8, prova a commentare l'istruzione 
ftp.encoding = "utf-8"

in maniera da fagli leggere con la codifica di defaul (credo sia la ISO-8859-1), se non funziona neanche così prova ad utilizzare la codifica ascii.

Offline laschil

  • python unicellularis
  • *
  • Post: 6
  • Punti reputazione: 0
    • Mostra profilo
Re:Upload di un file su altervista.org
« Risposta #2 il: Febbraio 15, 2021, 09:03 »
Innanzitutto grazie per la risposta. Ho fatto come hai detto tu ho commentato la riga dell'encoding ma non è cambaito l'errore.
Ho trovato su stackoverflow qualcosa di simile ma anche cambiando la codifica in utf-8 senza bom le cose no cambiano.
Proverò ma è strano che succeda. Filezilla me lo uploada.
Grazie ancora proverò più tardi.

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 353
  • Punti reputazione: 0
    • Mostra profilo
Re:Upload di un file su altervista.org
« Risposta #3 il: Febbraio 15, 2021, 12:11 »
Guardando bene il traceback, vedo che l'errore deriva direttamente dalla azione di connessione, l'istruzione sull'encoding è successiva ... forse sono proprio le impostazioni di default di ftplib a non andare bene, potresti provare a definire l'encoding da utilizzare direttamente in quella istruzione, modificando
tp = ftplib.FTP(FTP_HOST, FTP_USER, FTP_PASS)

in
tp = ftplib.FTP(FTP_HOST, FTP_USER, FTP_PASS, encoding='utf-8')

come nella docs del 3.9.1
[edit] mi è caduta la connessione mentre modificavo con quanto segue :
ovviamente, lo utf-8 è solo indicativo, non necessariamente "giusto", se possibile verifica quale codifica lato server risulta a filezilla, altra cosa, poi, sarebbe accertarsi se le impostazioni che utilizzi nelle connessioni riuscite effettuate con filezilla siano tutte presenti nel tentativo di connessione tramite ftplib.

N.B. : verificando nella mia installazione (Linux, libreria python 3.8.5) vedo che lo encoding è indicato come "Latin-1"
|  ----------------------------------------------------------------------
     |  Data and other attributes inherited from FTP:
     | 
     |  debugging = 0
     | 
     |  encoding = 'latin-1'
     | 
     |  file = None

"suppongo" siano le impostazioni di default, verifica la Tua libreria ("help('ftplib')" in una shell python), potrebbe essere significativo per il Tuo problema.

Segnalo questa discussione su stackoverflow
« Ultima modifica: Febbraio 15, 2021, 13:02 da nuzzopippo »

Offline laschil

  • python unicellularis
  • *
  • Post: 6
  • Punti reputazione: 0
    • Mostra profilo
Re:Upload di un file su altervista.org
« Risposta #4 il: Febbraio 16, 2021, 09:00 »
Grazie ancora per l'aiuto sono riuscito a risolvere grazie ai tuoi suggerimenti, ieri ho accodato nella connessione la stringa encoding="Latin 1" e adesso funziona.
ecco il codice per il messaggio di benvenuto e la list dei files:

from ftplib import FTP


host = 'ftp.aiazzone.altervista.org'
user = 'aiazzone'
passwd = '**********'

with FTP(host,user,passwd,encoding='Latin-1') as ftp:
    print(ftp.getwelcome())
    ftp.dir()


Ancora grazie per l'aiuto prezioso.
Lanfranco Schillaci
laschil@gmail.com