2010-10-17 17:55:07 +0000 2010-10-17 17:55:07 +0000
40
40
Advertisement

CURL aby pobrać katalog

Advertisement

Próbuję pobrać pełny katalog strony internetowej za pomocą CURL. Poniższe polecenie nie działa:

curl -LO http://example.com/

Zwraca błąd: curl: Remote file name has no length!.

Ale kiedy wykonam to: curl -LO http://example.com/someFile.type to działa. Jakiś pomysł jak pobrać wszystkie pliki z podanego katalogu? Dzięki.

Advertisement
Advertisement

Odpowiedzi (6)

40
40
40
2014-01-31 16:44:52 +0000

Zawsze działa dla mnie, włączone bez rodzica i rekursywne, aby uzyskać tylko żądany katalog.

wget --no-parent -r http://WEBSITE.com/DIRECTORY
32
32
32
2010-10-17 19:59:25 +0000

HTTP tak naprawdę nie ma pojęcia katalogów. Ukośniki inne niż pierwsze trzy (http://example.com/) nie mają żadnego specjalnego znaczenia, z wyjątkiem .. w relatywnych adresach URL. Tak więc, o ile serwer nie stosuje się do określonego formatu, nie ma sposobu na “pobranie wszystkich plików z podanego katalogu”.

Jeśli chcesz pobrać całą stronę, najlepszym rozwiązaniem jest rekurencyjne przejście przez wszystkie linki na stronie głównej. Curl nie potrafi tego zrobić, ale wget tak. To zadziała, jeśli strona nie jest zbyt dynamiczna (w szczególności, wget nie zobaczy linków, które są skonstruowane przez kod Javascript). Zacznij od wget -r http://example.com/, a następnie zajrzyj do “Recursive Retrieval Options” i “Recursive Accept/Reject Options” w podręczniku wget po więcej istotnych opcji (głębokość rekursji, listy wykluczeń, itp.).

Jeśli strona próbuje zablokować automatyczne pobieranie, może być konieczna zmiana łańcucha agenta użytkownika (-U Mozilla), oraz zignorowanie robots.txt (utwórz pusty plik example.com/robots.txt i użyj opcji -nc, aby wget nie próbował go pobrać z serwera).

17
Advertisement
17
17
2014-01-23 11:50:03 +0000
Advertisement

W tym przypadku, curl NIE jest najlepszym narzędziem. Możesz użyć wget z argumentem -r, jak poniżej:

wget -r http://example.com/

Jest to najbardziej podstawowa forma, i i możesz również użyć dodatkowych argumentów. Więcej informacji na ten temat znajdziesz na stronie manpage (man wget).

5
5
5
2010-10-17 17:59:25 +0000

To nie jest możliwe. Nie ma standardowego, ogólnie zaimplementowanego sposobu, aby serwer WWW zwrócił ci zawartość katalogu. Większość serwerów generuje indeks HTML katalogu, jeśli jest tak skonfigurowany, ale to wyjście nie jest standardowe, ani w żaden sposób gwarantowane. Możesz parsować ten HTML, ale pamiętaj, że format będzie się zmieniał w zależności od serwera i nie zawsze będzie włączony.

2
Advertisement
2
2
2013-01-20 00:08:28 +0000
Advertisement

Możesz użyć rozszerzenia Firefoxa DownThemAll! Pozwoli Ci ono pobrać wszystkie pliki w katalogu za pomocą jednego kliknięcia. Jest również konfigurowalny i można określić, jakie typy plików do pobrania. Jest to najłatwiejszy sposób, jaki znalazłem.

0
0
0
2014-01-23 12:44:17 +0000

Możesz znaleźć tutaj zastosowanie dla rippera stron internetowych, który pobierze wszystko i zmodyfikuje zawartość / linki wewnętrzne do użytku lokalnego. Dobry można znaleźć tutaj: http://www.httrack.com .

Advertisement

Pytania pokrewne

7
16
19
8
2
Advertisement