Скачивание файла с FTP с использованием cURL

20

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

curl " ftp: // myftpsite " - имя пользователя: пароль -Q "CWD / users / 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 путь указывается относительно начального каталога (обычно это ваш домашний каталог). Вам нужно указать абсолютный путь, а это значит использовать %2fдля указания /. Это необходимо, поскольку путь в ftp:URL-адресах обрабатывается как список разделенных косой чертой имен , каждое из которых должно быть задано отдельной CWDкомандой. %2fДекодируют после расщепления. См. RFC 1738 и URL-адреса FTP .

Что касается выходного местоположения, просто укажите путь к -o.


Предложения по безопасности:

  • Не указывайте свой пароль в URL. Хранить его ~/.netrcне особо безопасно, но, по крайней мере, оно скрыто от ps -ef.

  • Ваш пароль отправляется в виде открытого текста. Если сервер поддерживает это, используйте curl --ssl-reqdилиcurl ftps://mysite/...

  • Использование SFTP (протокол передачи файлов SSH) было бы еще лучше.

user1686
источник
Работал отлично. Не совсем уверен, что я полностью понимаю, как используется% 2f, поскольку вы также используете /, но эй, это работает, поэтому я не буду жаловаться. Спасибо за помощь!
Иосия
1
@Josiah: Кажется , что URL «путь» расщепляется /, и каждый аргумент передается с помощью CWDкоманды: %2fusers/myfolderа CWD /users, CWD myfolder. См. RFC 1738 по этой теме.
user1686
2
curl -T /users/myfolder/myfile.raw -u username:password "ftp://myftpsite/path/myfile.raw"

Я использую это все время. Отлично работает.

Веселый Стог
источник
1
Я первый, кто заметил, что этот ответ неверный? Параметр -T означает «загрузка файла», в то время как OP запросил «загрузку файла»
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.

Дэн
источник