Page 1 of 1

Message 150 Starting data transfer et puis plus rien d'autre

Posted: Thu 4 Jan 2024 16:50
by fuz20
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 :
Image
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

Re: Message 150 Starting data transfer et puis plus rien d'autre

Posted: Fri 5 Jan 2024 12:23
by Dominique
Bonjour Fuz20,
Très ambitieux comme utilisation du Pico (faudrait que tu donne un lien vers les sources).

Voici quelques pistes:
1) As tu essayé avec un client ftp en ligne de commande ? (histoire de voir si tu arrive à avoir la réponse attendue)
2) As tu beaucoup de fichiers dans ton répertoire ftp? voire aucun? (ce sont deux cas particuliers qui pourraient bien faire sauter du code).
3) `data = conn.recv(1024)` et s'il y a moins de 1024 octets ? de combien est le timeout ?

Cordialement,
Dominique