Tags Posts tagged with "wget"

wget

przez -
0 1252
Konsola

Giuseppe Scrivano ogłosił wydanie wget 1.17, konsolowego narzędzia do pobierania plików z internetu za pośrednictwem protokołów HTTP, HTTPS i FTP. Dodano pełną obsługę HTTP Strict Transport Security (HSTS), mechanizmu zabezpieczającego nasze połączenia, poprzez implementację opcji --hsts i --hsts-file. Dokładny opis działania znajduje się w artykule: HSTS czyli HTTP Strict Transport Security. Dodatkowo deweloperzy wdrożyli wsparcie dla protokołu FTPS (FTP Secure), wsparcie dla opcji --if-modified-since i --rejected-log.

Z reszty nowości warto wspomnieć o opcjach --metalink-over-http i --input-metalink, możliwości zastrzeżenia nazw plików pod VMS, a także opcji --convert-file-only do konwertowania tylko części nazwy pliku w adresie URL.

Wget 1.17 nie pobiera lub nie zapisuje plików, jeżeli pojawił się błąd, podczas używania opcji --spider.

przez -
4 1560
wget

Ogłoszono wydanie Wget 1.15, narzędzia do ściągania plików z internetu. Obsługuje protokoły HTTP, HTTPS oraz FTP. Jest to bardzo wygodne narzędzie, które ma olbrzymią ilość różnych opcji. Większości spośród tych przełączników nie używa się podczas normalnej eksploatacji programu.

Zmiany, jakie zaszły:

  • Dodano wsparcie dla --method
  • Dodano wsparcie dla nazw plików, dłuższych niż MAX_FILE
  • Dodano obsługę listowania FTP dla serwera FTP na systemie Windows Server 2008 R2
  • Poprawiono regresję, kiedy opcje: -c i --content-disposition są używane jednocześnie
  • Dodano obsługę skróconych adresów URL w pliku wejściowym
  • Naprawiono opcję -c z serwerami, które nie precyzowało długości zawartości
  • Dodano obsługę MD5-SESS
  • Dodano obsługę opcji --https-only. Kiedy jest używana, wget będzie podążał tylko za odnośnikami HTTPS w trybie rekurencyjnym
  • Dodano obsługę Perfect-Forward Secrecy w opcji --secure-protocol
  • Dodano wsparcie niektórych serwerów FTP, zwracały puste listy przy opcji: LIST -a
  • Naprawiono problem z odnośnikami IRI, które nie były dozwolone, jeżeli znajdowały się w dokumencie HTML
  • Określanie hosta odbywa się przy użyciu metody HTTP CONNECT
  • Przy przekierowywaniu ma być używana poprawna metoda HTTP

Konsola

Wget – narzędzie do ściągania plików z internetu. Obsługuje protokoły HTTP, HTTPS oraz FTP. Jest to bardzo wygodne narzędzie, które ma olbrzymią ilość różnych opcji. Większości spośród tych przełączników nie używa się podczas normalnej eksploatacji programu. W poniższym artykule postaram się wyjaśnić działanie najbardziej przydatnych opcji a następnie pokazać kilka przykładów radzenia sobie z bardziej “wymagającymi” stronami.

wget

Na początek ogólna składnia:

wget opcje adres

Najważniejsze opcje (podane w parach: forma krótka i długa, należy wybrać jedną z nich):

-c , –continue

Opcja ta służy do kontynuowania pobierania pliku, który już znajduje się w folderze pobierania. Funkcja ta jest szczególnie przydatna przy pobieraniu dużych plików. Jeśli próbujemy ściągnąć inny plik, ale o tej samej nazwie co już istniejący, możemy napotkać następujące sytuacje:

  • plik ściągany jest większy od posiadanego – wtedy część pliku ściąganego dopisze się na końcu posiadanego, tworząc coś, co nie zawsze da się otworzyć
  • plik ściągany jest mniejszy od posiadanego – wtedy wget będzie próbował pobrać dalszą część pliku, ale będzie szukał czegoś, co nie istnieje i podejmie kilka nieudanych prób (które po prostu trwają, ale nic nie pobierają)
  • jeśli serwer z którego ściągamy jest skonfigurowany tak, że nie podaje informacji o wielkości pobieranego pliku, to zazwyczaj plik starszy zostanie nadpisany nowszym.

-b , –background

Cały proces pobierania zostanie przeniesiony w tło i nie przerwie go nawet zamknięcie konsoli w której uruchomiliśmy ściąganie. Informacje o postępie pobierania zapisywane są w pliku “wget-log”, a jeśli taki istnieje, to w pliku “wget-log.#”, gdzie “#” jest kolejnym numerem. Możemy oczywiście samodzielnie zdefiniować nazwę pliku, w którym zapisywany jest postęp pobierania za pomocą opcji “-o plik.log” lub za pomocą opcji “-a plik.log”. Obie opcje powodują zapisywanie wyjścia programu w pliku “plik.log”, różnica jest taka, że opcja “-o plik.log” powoduje, że istniejący “plik.log” jest nadpisywany, zaś opcja “-a plik.log” nakazuje programowi kontynuować istniejący plik.

-m , –mirror

Opcja powoduje, że ściągamy zawartość wskazanej witryny wraz z zachowaniem struktury katalogów. Jeśli w ten sposób chcemy pobrać pojedynczy plik – zastanie on zapisany wraz ze strukturą katalogów. Przykłady:

wget -m http://osworld.pl

W tej sytuacji program pobierze zawartość całej witryny osworld.pl i zapisze ją w folderze ./osworld.pl

wget -m http://osworld.pl/wp-content/uploads/osworld-logo-ikonka.png

W tej sytuacji program pobierze plik osworld-logo-ikonka.png i zapisze go w folderze ./osworld.pl/wp-content/uploads/

-np , –no-parent

Podczas pobierania program nie będzie próbował ściągać nic, co znajduje się w innym katalogu niż ten podany w adresie. Przykład:

wget -m -np http://osworld.pl/blog/

W tym przykładzie program pobierze wszystko, co znajduje się na serwerze w folderze osworld.pl/blog/, nie pobierze nic ponadto.

-i plik , –input-file=plik

Opcji tej używa się gdy jest spora lista adresów zapisana w pliku na dysku. Wszystkie adresy są pobierane po kolei zgodnie z opcjami podanymi w linii poleceń.

-O plik , –output-document=plik

Zapisuje pobrany dokument w podanym pliku, jednocześnie zastępując go. Jeśli ściągamy więcej niż jeden plik, to wszystko, co zostanie ściągnięte będzie zapisane w jednym pliku.

-A wzorzec , –accept wzorzec

Powoduje, że podczas pobierania na dysku zapisywane są tylko pliki pasujące do wzorca (choć pobierane są wszystkie pliki). Jeśli we wzorcu zostanie użyty chociaż jeden ze znaków: “*”, “?”, “[” lub “]”, wtedy dopasowanie do wzorca będzie zgodne z podanym wyrażeniem regularnym. W przeciwnym wypadku podany wzorzec jest traktowany jako rozszerzenie pliku (czyli to, co w pliku znajduje się po kropce). Można podać więcej niż jeden wzorzec, znakiem rozdzielającym jest przecinek. Przykład:

wget -m -A jpg,*potkani* http://osworld.pl

Zapisze na dysku pliki z rozszerzeniem “jpg” (czyli *.jpg) i pliki, w których nazwie występuje człon “potkani” (czyli *potkani*).

-R wzorzec , –reject wzorzec

Powoduje, że nie pobierane są pliki pasujące do wzorca. Jeśli we wzorcu zostanie użyty chociaż jeden ze znaków: “*”, “?”, “[” lub “]”, wtedy dopasowanie do wzorca będzie zgodne z podanym wyrażeniem regularnym. W przeciwnym wypadku podany wzorzec jest traktowany jako rozszerzenie pliku (czyli to, co w pliku znajduje się po kropce). Można podać więcej niż jeden wzorzec, znakiem rozdzielającym jest przecinek. Przykład:

wget -m -R jpg,*potkani* http://osworld.pl

Nie pobierze plików z rozszerzeniem “jpg” (czyli *.jpg) i pliki, w których nazwie występuje człon “potkani” (czyli *potkani*).

-X lista , –exclude-directories=lista

Podane w tej opcji katalogi nie zostaną w ogóle pobrane. Przykład:

wget -m -X spotkania http://osworld.pl

Nie pobierze niczego, co znajduje się na serwerze w folderze spotkania.

-l liczba , –level=liczba

Ogranicza liczbę ściąganych podstron do podanej przy tej opcji.

Przykłady podstawowego użycia wget

Pobranie pojedynczego pliku:

wget http://strona.pl/plik

Pobranie pojedynczego pliku i zapisanie go jako “sciagniety_plik”:

wget http://strona.pl/plik -O sciagniety_plik

Pobranie wszystkiego co znajduje się na stronie (mirror strony):

wget -m -b -c http://strona.pl

Jeśli chcemy pobrać jakąś stronę, ale tylko konkretny folder i nie chcemy, aby wget ściągnął cokolwiek spoza tego folderu, a status pobierania zapisywał w pliku “log”, wpisujemy:

wget -m -np -b -c http://strona.pl/folder -o log

Jeśli chcemy, aby wget pobrał stronę wraz z obrazkami i wszystkimi plikami, do których prowadzi ściągana strona:

wget -m -b -c http://strona.pl -l 1

Jednak wiele stron jest zabezpieczonych przed masowym pobieraniem. W takim przypadku wget także nieźle daje sobie radę. Czasami z naszą pomocą, czasami zaś z pomocą prostego skryptu. Poniżej kilka przykładów omijania takich zabezpieczeń.

Przykłady zaawansowanego użycia wget

1. Serwer wymaga logowania

Jeśli strona, z której pragniemy ściągać wymaga logowania, to można je wykonać na kilka sposobów. Najbardziej popularny:

wget -m -b -c http://login:hasło@strona.pl

Sposób ten nie zawsze zadziała. W takich wypadkach czasami trzeba trochę pokombinować. Tutaj niestety przyda nam się przeglądarka z obsługą plików cookies w formacie Netscape (np. Seamonkey). Za pomocą przeglądarki wchodzimy na stronę, logujemy się, zaznaczając na stronie logowania opcję zapamiętywania użytkownika. Znajdujemy na dysku twardym plik cookies naszej przeglądarki i wykonujemy:

wget -m -b -c http://strona.pl --load-cookies=/ścieżka/do/pliku/cookies.txt

2. Folder bf-analyze

Niektóre strony chronią obrazki na nich zawarte przed masowym ściąganiem za pomocą mechanizmu, który można rozpoznać widząc w linku do pliku folder “bf-analyze”. Przykładem tutaj może być obrazek http://www.freeduino.org/bf-analyze/images/freeduino_maxserial_500.jpg. Ze zwykłej przeglądarki widzimy obrazek, jednak, jeśli wywołamy wgeta:

wget -m -b -c http://www.freeduino.org/bf-analyze/images/freeduino_maxserial_500.jpg

Dowiemy się, że “BŁĄD 404: Not Found.”. Dziwne, ale jeśli usuniemy z adresu folder “bf-analyze”, to obrazek daje się ściągnąć:

wget -m -b -c http://www.freeduino.org/images/freeduino_maxserial_500.jpg

Niestety sam wget tutaj nie da sobie rady, ale można zrobić prosty skrypt, który najpierw pobierze wszystkie strony, później wyszuka w nich linki do plików w folderze bf-analyze, a później przerobi linki w ten sposób aby wycinały tekst “bf-analyze/”

3. Serwisy zabezpieczone przed szybkim pobieraniem

Niektóre strony zabezpieczone są skryptem, który blokuje dostęp dla IP, jeśli wykryje zbyt szybkie pobieranie jednego pliku za drugim. W takich wypadkach przydają się opcje “-w sekundy” i “–random-wait”. Pierwsza powoduje, że między kolejnymi próbami pobierania minie określona liczba sekund, druga zaś, że czas ten będzie trochę bardziej losowy. Przykład wywołania:

wget -w 10 --random-wait -m -b -c http://strona.pl

W takim wypadku kolejne pliki będą ściągane w odstępach losowych z zakresu 5-15 sekund.

4. Plik robots.txt blokujący wgeta

Plik robots.txt na serwerze służy do ograniczenia działania programów ściągających. Zazwyczaj znajdują się w nim informacje, które przeglądarki są zabronione i które foldery są wyłączone z pobierania automatycznego. Niestety, wget jest często wymieniony jako zabroniony. Możemy sobie z tym poradzić za pomocą opcji -U, która zmienia sposób w jaki nasz wget przedstawia się serwerowi:

wget -U "jestem drzewem" -m -b -c http://strona.pl

Jeśli ktoś przejrzy logi to oczywiście natrafi na dziwną identyfikację i może się zdenerwować. Dlatego warto wstawić linię jaką podaje inna przeglądarka. Pod adresem http://www.useragentstring.com/pages/Browserlist/ znajduje się spory wybór takich danych identyfikacyjnych. Niestety, czasami to nie wystarcza, bo w pliku robots.txt zablokowane jest automatyczne pobieranie ze wszystkich folderów. W takim wypadku można wyłączyć obsługę tego pliku, ale nie jest to zalecane i w zasadzie lepiej unikać takiego działania. Jeśli mimo wszystko musimy ściągnąć stronę, to wpisujemy:

wget -e robots=off -m http://strona.pl

Oczywiście wtedy koniecznie użyjmy pozostałych wcześniej wymienionych sposobów ukrywania wgeta.

5. Zabezpieczenie “proszę czekać”

Czasami, gdy próbujemy pobrać stronę, to zamiast niej pobieramy pustą stronę, czasami z informacją w stylu “proszę czekać”. Jest to dość proste zabezpieczenie, ale ostatnio coraz bardziej popularne i skutecznie blokujące pobieranie automatyczne. Mechanizm ten zazwyczaj (wyjątkiem są mechanizmy oparte na JavaScript, ale tego niestety wget jeszcze nie obsługuje) daje się oszukać poprzez dwukrotne podanie linka w wywołaniu wgeta:

wget http://strona.pl/plik http://strona.pl/plik

Niestety, można w ten sposób pobrać tylko pojedynczy plik, ale dzięki skryptom Bash łatwo ominąć ten problem.

Polecane

Jesień Linuksowa

1 1182
Polska Grupa Użytkowników Linuksa ma zaszczyt zaprosić na konferencję Jesień Linuksowa 2017, która odbędzie się w dniach 22 – 24 września 2017 roku. Jako...