Завантаження файлу з FTP за допомогою cURL


20

Я намагаюся використовувати команду cURL для завантаження файлу з FTP-сервера на локальний диск на комп'ютері. Я намагався

curl " ftp: // myftpsite " - ім'я користувача: пароль -Q "CWD / користувачів / myfolder /" -O "myfile.raw"

Але він повертає помилку, яка говорить:

curl: Віддалене ім’я файлу не має довжини!
curl: спробуйте 'curl --help' або 'curl --manual' для отримання додаткової інформації
curl: (6) Не вдалося вирішити хост: myfile.raw; Немає запису даних запитуваного типу

Я спробував деякі інші методи, але, здається, нічого не вийшло.

Крім того, я не зовсім впевнений, як вказати, в яку папку я хочу завантажити файл. Як би я це зробив?

Відповіді:


26

Спробуйте

curl -u user:password 'ftp://mysite/%2fusers/myfolder/myfile/raw' -o ~/Downloads/myfile.raw

У URL-адресах FTP шлях відносно стартового каталогу (як правило, ваш homedir). Вам потрібно вказати абсолютний шлях, а це означає використовувати %2fдля вказівки /. Це потрібно, оскільки шлях у ftp:URL-адресах розглядається як список розділених косою назвою імен , кожне з яких повинно бути надано окремій CWDкоманді. %2fДекодують після розщеплення. Див . URL-адреси RFC 1738 та FTP .

Що стосується вихідного місця, просто дайте шлях до -o.


Пропозиції щодо безпеки:

  • Не вводьте свій пароль в URL. Зберігання його ~/.netrcтакож не є особливо безпечним, але воно, принаймні, приховане ps -ef.

  • Ваш пароль надсилається чітким текстом. Якщо сервер його підтримує, використовуйте curl --ssl-reqdабоcurl ftps://mysite/...

  • Використання SFTP (протокол передачі файлів SSH) було б ще краще.


Працювали чудово. Не зовсім впевнений, що я повністю розумію, як використовується% 2f, як ви також використовуєте /, але він працює, тому я не буду скаржитися. Дякую за допомогу!
Йосія

1
@Josiah: Здається , що URL «шлях» розщеплюється /, і кожен аргумент передається за допомогою CWDкоманди: %2fusers/myfolderа CWD /users, CWD myfolder. Дивіться RFC 1738 на цю тему.
користувач1686

2
curl -T /users/myfolder/myfile.raw -u username:password "ftp://myftpsite/path/myfile.raw"

Я цим постійно користуюся. Це працює як шарм.


1
Я перший, хто помітив цю відповідь, неправильно? Параметр -T означає "завантаження файлу", а ОП попросив "завантажити файл"
Kar.ma

0

Спробуйте:

curl "ftp://user:password@myftpsite/users/myfolder/myfile.raw"

(Якщо назва віддаленого файлу - "myfile.raw")


Коли я спробую це, я отримую таку помилку: "curl: (9) Сервер заборонив вам перейти до заданої директорії". Я вважаю, що саме тому мені потрібно було використовувати команду -Q "CWD".

0

Як пропонує Ян,

curl " ftp: // user: password@myftpsite/users/myfolder/myfile.raw "

має працювати, але деякі FTP-сервери використовують політику безпеки, яка не відповідає стандартам. У цих випадках може допомогти --ftp-method singlecwdабо --ftp-method nocwdваріант.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.