Visualizzazione risultati 1 fino 5 di 5

Discussione: FTP tramite python

  1. #1
    aiazzone non è connesso Neofita
    Data registrazione
    24-07-2005
    Messaggi
    2

    Exclamation FTP tramite python

    Come da titolo non riesco ad 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 è:
    Codice:
    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()
    Ho scaricato ed eseguito il test di alervista e questo è il risultato:

    Risposta da un server non autorevole:

    Server: UnKnown
    Address: 192.168.1.1

    Nome: aiazzone.altervista.org
    Address: 138.201.222.27

    Risposta da un server non autorevole:

    Server: UnKnown
    Address: 192.168.1.1

    Nome: ftp.aiazzone.altervista.org
    Address: 138.201.222.27


    Traccia instradamento verso aiazzone.altervista.org [138.201.222.27]
    su un massimo di 30 punti di passaggio:

    1 1 ms 2 ms 1 ms USB_SCHILLACI [192.168.1.1]
    2 48 ms 40 ms 47 ms host-37-99-248-238.geny.it [37.99.248.238]
    3 30 ms 26 ms 29 ms host-37-99-248-237.geny.it [37.99.248.237]
    4 34 ms 38 ms 32 ms 20-228-157-185.fibertelecom.it [185.157.228.20]
    5 67 ms 58 ms 72 ms 53-228-157-185.fibertelecom.it [185.157.228.53]
    6 * * * Richiesta scaduta.
    7 80 ms 77 ms 68 ms core24.fsn1.hetzner.com [213.239.252.42]
    8 63 ms 67 ms 66 ms ex9k3.dc8.fsn1.hetzner.com [213.239.229.142]
    9 * * * Richiesta scaduta.
    10 * * * Richiesta scaduta.
    11 * * * Richiesta scaduta.
    12 * * * Richiesta scaduta.
    13 * * * Richiesta scaduta.
    14 * * * Richiesta scaduta.
    15 * * * Richiesta scaduta.
    16 * * * Richiesta scaduta.
    17 * * * Richiesta scaduta.
    18 * * * Richiesta scaduta.
    19 * * * Richiesta scaduta.
    20 * * * Richiesta scaduta.
    21 * * * Richiesta scaduta.
    22 * * * Richiesta scaduta.
    23 * * * Richiesta scaduta.
    24 * * * Richiesta scaduta.
    25 * * * Richiesta scaduta.
    26 * * * Richiesta scaduta.
    27 * * * Richiesta scaduta.
    28 * * * Richiesta scaduta.
    29 * * * Richiesta scaduta.
    30 * * * Richiesta scaduta.

    Traccia completata.

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

  2. #2
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,252

    Predefinito

    Salve,
    provi a togliere ftp da FTP_HOST.

    Cordiali saluti.

  3. #3
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Puoi restringere il codice al solo login?
    Imposta Latin-1 nella connessione e poi altro per i file.
    https://docs.python.org/3/library/ftplib.html
    Con il sottodominio ftp è la sintassi corretta.
    In Latin-1 esadecimale E8 corrisponde al carattere è e grave, che in UTF-8 può essere rappresentato da un carattere a due byte (in sintesi E8 non esiste per UTF-8 ma C3A8) probabilmente il server risponde in LATIN-1 indicando che il login non funziona (ergo comunque sequenza valida o meno non riconosce le credenziali).
    Ultima modifica di darbula : 15-02-2021 alle ore 17.52.02

  4. #4
    aiazzone non è connesso Neofita
    Data registrazione
    24-07-2005
    Messaggi
    2

    Predefinito

    Grazie a tutti per le risposte. Ho risolto leggendomi per bene https://docs.python.org/3/library/ftplib.html
    Posto il codice che ho usato:
    from ftplib import FTP
    filename = 'ftpclient.py'
    file_copy = 'lettera.txt'
    ftp = FTP('ftp.aiazzone.altervista.org','*******','***** ***',encoding = 'Latin-1')

    try:
    with open(file_copy, 'wb') as fp:
    res = ftp.retrbinary('RETR ' + file_copy, fp.write)
    if not res.startswith('226 Transfer complete'):
    print('Download complete')
    except ftplib.all_errors as e:
    print('FTP error:', e)


    try:
    with open(filename, 'rb') as fp:
    res = ftp.storlines("STOR " + filename, fp)
    if not res.startswith('226 Transfer complete'):
    print('Upload complete')

    except ftplib.all_errors as e:
    print('FTP error:', e)

    ftp.dir()

    ftp.quit()

  5. #5
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Comunque qui in altervista puoi anche usare FTPS con porta 21 e connessione esplicita. https://www.ftptoday.com/blog/explic...u-need-to-know
    Te lo dico perché ti vedo programmare bene, quindi occorre la documentazione della libreria per conoscere cosa fa esattamente nonché guardare anche il codice della libreria.
    Il debug va interpretato a piccoli passi, Il codice si riduce al minimo in modo da restringere l'origine dell'errore. (Si è a tentativi e a volte occorre fortuna).
    Da python 3 per aprire o chiudere un un'oggetto file esiste il terzo parametro enconding
    Codice:
    myfile = open('alice.txt', encoding='utf-8')     # Reading a UTF-8 file; 'r' is omitted
    myfile = open('alice.txt', 'wb', encoding='utf-8')     # File will be written in UTF-8
    questo occorre quando l'origine è con enconding conosciuto/valido da trasformare in altra codifica (Ovviamente entrambe le codifiche devono usare gli stessi caratteri per una conversione da Latin-1 E8 esadecimale a UTF-8 esadecimale C3A8, altrimenti sarà un file danneggiato).
    Però ovviamente la libreria si aspetta lo stesso enconding se presente in __init__ altrimenti il default utf-8. https://docs.python.org/3/library/so...ocket.makefile
    Ultima modifica di darbula : 15-02-2021 alle ore 23.18.25

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •