используя retr из сценария perl - «RETR» не понят - PullRequest
1 голос
/ 02 декабря 2010

У меня есть простая задача, в моей компании нам нужно скачивать файлы с ftp-сервера, обычно у меня есть несколько сценариев, и они могут справиться с этим, но на одном сервере у меня есть некоторые проблемы.Когда я использую системную команду ftp, она работает нормально, файл может быть загружен, но когда я пытаюсь сделать это из perl, я получаю сообщение об ошибке «RETR» not found ».

Мои сценарии выглядят так

shell:

ftp> debug<br> ftp> open xx.xx.xx.xx<br> 220 ProFTPD 1.3.0 Server (ProFTPD Default Installation) [xx.xx.xx.xx]<br> ftp> cd IN<br> ---> CWD IN<br> 250 CWD command successful<br> ftp> get somefile10112499xxx.ZIP<br> ---> PORT 3,126,181,35,14,131<br> 200 PORT command successful<br> ---> RETR somefile10112499xxx.ZIP<br> 150 Opening ASCII mode data connection for somefile10112499xxx.ZIP (13299 bytes)<br> 226 Transfer complete.<br> ftp: 64d bajtów odebranych w 0,01Sekund 889,80Kbajtów/sek.<br> ftp> quit<br> ---> QUIT<br> 221 Goodbye.<br> скрипт perl:

use Net::FTP;<br> $ftp = Net::FTP->new($FTP_HOST, Debug => 1,Passive=>0) ;<br> $ftp->login($FTP_USER,$FTP_PASS) ;<br> $ftp->retr("somefile10112499xxx.ZIP");<br> $ftp->quit;<br> Я пытаюсь использовать пассивный режим, ASCII и двоичный метод передачи, но все это делает "Net :: FTP = GLOB(0x1ee71a0) <<< 500 'RETR' не понято ". </p>

Какие-нибудь другие параметры определены по умолчанию в команде ftp?Может быть, я должен внести некоторые изменения в сценарий Perl?

Ответы [ 3 ]

1 голос
/ 02 декабря 2010

Что нужно знать о FTP, так это наличие клиентской программы и серверной программы. Клиентская программа принимает один набор команд, а сервер - другой набор site команд. Ваш клиент может взять RETR и превратить его в то, что знает удаленный сервер. То, что 500 вы получаете, оттуда с сервера. Таким образом, независимо от того, знает ли ваш локальный клиент, что сервер примет для «RETR», не похоже, что сервер понимает эту команду. Это то, что он говорит вам.

Прошло много времени с тех пор, как я взломал Net::FTP, но, если я помню, многие из менее частых команд передаются на сервер.

1 голос
/ 02 декабря 2010

Есть ли причина, по которой вы используете $ftp->retr() вместо $ftp->get() для загрузки этих файлов?Обычно с Net :: Ftp , если вы просто загружаете файлы, вы используете метод

get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] )

.Я считаю, что метод retr() возвращает ссылку на Net::FTP::dataconn объект.

0 голосов
/ 03 декабря 2010

Я нашел решение, проблема не в скрипте загрузки, а на FTP-сервере.Файл был удален с сервера - произошел какой-то сбой - и поэтому я не смог его загрузить.

В конце концов, кажется, что в скрипте иногда я использовал метод get без каких-либо аргументов, и этотакже вернулся 500 'RETR' not understood.Я думаю, что это не круто, это должно сказать мне, что такого файла нет.

Но я хочу поблагодарить вас, люди, что читаете и помогаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...