Скачивание файла с 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) было бы еще лучше.


Работал отлично. Не совсем уверен, что я полностью понимаю, как используется% 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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.