Pobieranie pliku z FTP za pomocą cURL

20

Próbuję użyć polecenia cURL, aby pobrać plik z serwera FTP na dysk lokalny na moim komputerze. próbowałem

curl " ftp: // myftpsite " - nazwa użytkownika: hasło -Q "CWD / users / myfolder /" -O "myfile.raw"

Ale zwraca błąd, który mówi:

curl: nazwa zdalnego pliku nie ma długości!
curl: spróbuj „curl --help” lub „curl --manual”, aby uzyskać więcej informacji
curl: (6) Nie można rozpoznać hosta: mój_plik.raw; Brak rekordu danych żądanego typu

Próbowałem innych metod, ale wydaje się, że nic nie działa.

Nie jestem też pewien, jak określić, do którego folderu chcę pobrać plik. Jak mam to zrobić?

Josiah
źródło

Odpowiedzi:

26

Próbować

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

W adresach URL FTP ścieżka jest względna do katalogu początkowego (zwykle jest to katalog domowy). Musisz podać ścieżkę bezwzględną, a to oznacza użycie %2fdo określenia /. Jest to konieczne, ponieważ ścieżka w ftp:adresach URL jest traktowana jako lista nazw rozdzielanych ukośnikiem , z których każda powinna być przypisana osobnemu CWDpoleceniu. %2fJest dekodowany po podziału. Zobacz RFC 1738 i adresy URL FTP .

Jeśli chodzi o lokalizację wyjściową, po prostu podaj ścieżkę do -o.


Sugestie bezpieczeństwa:

  • Nie wpisuj swojego hasła w adresie URL. Przechowywanie go również ~/.netrcnie jest szczególnie bezpieczne, ale przynajmniej jest przed nim ukryte ps -ef.

  • Twoje hasło jest wysyłane zwykłym tekstem. Jeśli serwer to obsługuje, użyj curl --ssl-reqdlubcurl ftps://mysite/...

  • Korzystanie z SFTP (protokołu przesyłania plików SSH) byłoby jeszcze lepsze.

użytkownik1686
źródło
Działa świetnie. Nie jestem pewien, czy w pełni rozumiem, w jaki sposób używany jest% 2f, ponieważ ty także używasz /, ale hej, to działa, więc nie będę narzekać. Dzięki za pomoc!
Josiah
1
@Josiah: Wydaje się, że adres URL „ścieżka” jest podzielona przez /, a każdy argument jest wysyłany z CWDpoleceniem: %2fusers/myfolderjak CWD /users, CWD myfolder. Zobacz RFC 1738 na ten temat.
user1686
2
curl -T /users/myfolder/myfile.raw -u username:password "ftp://myftpsite/path/myfile.raw"

Używam tego cały czas. To działa jak urok.

cUrly Stooge
źródło
1
Czy jako pierwszy zauważyłem, że ta odpowiedź jest nieprawidłowa? Parametr -T oznacza „przesyłanie pliku”, podczas gdy OP poprosił o „pobranie pliku”
Kar.ma
0

Próbować:

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

(Jeśli nazwa zdalnego pliku to „mój_plik.raw”)


źródło
Gdy próbuję, pojawia się następujący błąd: „curl: (9) Serwer odmówił przejścia do podanego katalogu”. Uważam, że dlatego musiałem użyć polecenia -Q „CWD”.
0

Jak sugeruje yan,

curl " ftp: // użytkownik: hasło@myftpsite/users/myfolder/myfile.raw "

powinien działać, ale niektóre serwery FTP używają zasad bezpieczeństwa, które nie są zgodne ze standardami. W takich przypadkach opcja --ftp-method singlecwdlub --ftp-method nocwdmoże pomóc.

Dan
źródło