Message 150 Starting data transfer et puis plus rien d'autre
Posted: Thu 4 Jan 2024 16:50
Hello
J'essaye de connecter mon programme micropython qui tourne sur mon Raspberry Pi Pico à un serveur FTP Filezilla Server installer sur un PC distant en FTP_TLS
J'utilise les bibliothèques ftplib.py et ftplibtls.py mais qui sont écrites pour ESP
J'arrive a me logger et a m'authentifier :
Mais j'ai le message : 150 Starting data transfer et puis plus rien d'autre.
J'ai vérifié mes autorisations de pare-feu sur mon serveur (j'ai essayé sans pare-feu aussi)
Je suis en mode Passif
Mais je n'arrive pas à lire le contenu du répertoire sur mon serveur avec le code suivant :
```
def retrlines(self, cmd, callback=None):
"""Retrieve data in line mode.
A new port is created for you.
Args:
cmd: A RETR, LIST, or NLST command.
callback: An optional single parameter callable that is called
for each line with the trailing CRLF stripped.
[default: print]
Returns:
The response code.
"""
if callback is None:
callback = print
self.sendcmd('TYPE A')
print("========= retrlines - ftplib : cmd : ", cmd)
with self.ntransfercmd(cmd)[0] as conn:
print("========= retrlines - ftplib : OK ")
data = conn.recv(1024) # Lire 1024 octets du socket (ajustez la taille selon vos besoins)
print("========= retrlines - ftplib : conn (raw data):", data)
if hasattr(conn, 'makefile'):
print("========= retrlines - ftplib : makefile ")
fp = conn.makefile('rb')
print("========= retrlines - ftplib : makefile (suite)")
else:
fp = conn._sock
n = 1
while True:
print("========= retrlines - ftplib : while true => " , n)
n = n+1
line = fp.readline(MAXLINE + 1).decode()
print("========= retrlines - ftplib : line : ", line)
if not line:
print("========= retrlines - ftplib : not line ")
break
if len(line) > MAXLINE:
raise Error("got more than %d bytes" % MAXLINE)
if self.debugging > 2:
print('*retr*', repr(line))
if line[-2:] == CRLF:
line = line[:-2]
elif line[-1:] == '\n':
line = line[:-1]
callback(line)
print("========= retrlines - ftplib : while false")
# shutdown ssl layer
if _SSLSocket is not None and isinstance(conn, _SSLSocket):
conn.unwrap()
fp.close()
print("========= retrlines - ftplib : close")
return self.voidresp()
items = []
ftp_conn.retrlines("LIST",items.append)
```
En fait, c'est cette commande qui bloque : data = conn.recv(1024) # Lire 1024 octets du socket (ajustez la taille selon vos besoins)
Et je n'ai pas plus d'informations
Quelqu'un pourrait il m'aider ?
Pour rappel, je travaille avec un Raspberry Pi Pico WH (RP2040) avec le Micropython version 1.22.0
Merci d'avance
J'essaye de connecter mon programme micropython qui tourne sur mon Raspberry Pi Pico à un serveur FTP Filezilla Server installer sur un PC distant en FTP_TLS
J'utilise les bibliothèques ftplib.py et ftplibtls.py mais qui sont écrites pour ESP
J'arrive a me logger et a m'authentifier :
Mais j'ai le message : 150 Starting data transfer et puis plus rien d'autre.
J'ai vérifié mes autorisations de pare-feu sur mon serveur (j'ai essayé sans pare-feu aussi)
Je suis en mode Passif
Mais je n'arrive pas à lire le contenu du répertoire sur mon serveur avec le code suivant :
```
def retrlines(self, cmd, callback=None):
"""Retrieve data in line mode.
A new port is created for you.
Args:
cmd: A RETR, LIST, or NLST command.
callback: An optional single parameter callable that is called
for each line with the trailing CRLF stripped.
[default: print]
Returns:
The response code.
"""
if callback is None:
callback = print
self.sendcmd('TYPE A')
print("========= retrlines - ftplib : cmd : ", cmd)
with self.ntransfercmd(cmd)[0] as conn:
print("========= retrlines - ftplib : OK ")
data = conn.recv(1024) # Lire 1024 octets du socket (ajustez la taille selon vos besoins)
print("========= retrlines - ftplib : conn (raw data):", data)
if hasattr(conn, 'makefile'):
print("========= retrlines - ftplib : makefile ")
fp = conn.makefile('rb')
print("========= retrlines - ftplib : makefile (suite)")
else:
fp = conn._sock
n = 1
while True:
print("========= retrlines - ftplib : while true => " , n)
n = n+1
line = fp.readline(MAXLINE + 1).decode()
print("========= retrlines - ftplib : line : ", line)
if not line:
print("========= retrlines - ftplib : not line ")
break
if len(line) > MAXLINE:
raise Error("got more than %d bytes" % MAXLINE)
if self.debugging > 2:
print('*retr*', repr(line))
if line[-2:] == CRLF:
line = line[:-2]
elif line[-1:] == '\n':
line = line[:-1]
callback(line)
print("========= retrlines - ftplib : while false")
# shutdown ssl layer
if _SSLSocket is not None and isinstance(conn, _SSLSocket):
conn.unwrap()
fp.close()
print("========= retrlines - ftplib : close")
return self.voidresp()
items = []
ftp_conn.retrlines("LIST",items.append)
```
En fait, c'est cette commande qui bloque : data = conn.recv(1024) # Lire 1024 octets du socket (ajustez la taille selon vos besoins)
Et je n'ai pas plus d'informations
Quelqu'un pourrait il m'aider ?
Pour rappel, je travaille avec un Raspberry Pi Pico WH (RP2040) avec le Micropython version 1.22.0
Merci d'avance