Dziś chciał bym przedstawić rozwiązanie bazujące na narzędziu wget.exe dostępnego dla platformy *nix jaki Windows. Narzędzie dla Windows jest do pobraniu np. tu. Narzędzie to nie wymaga instalowania, wystarczy że skopujemy plik wget.exe do jakiegoś katalogu.
Metoda jaką się posłużymy wymaga posiadania wiedzy o tym co jest przesyłane do strony z której chcemy coś pobrać. Przeglądarki webowe komunikują się z serwerami za pomocą komunikatów tekstowych które możemy podejrzeć za pomocą odpowiedniego narzędzia. Jednym z takich narzędzi może być rozszerzenie do przeglądarki Firefox: LiveHeader. Rozszerzenie to pokazuje pełną komunikację między przeglądarką a serwerem na poziomie nagłówków. Dzięki temu można podejrzeć co jest wysyłane do serwera WWW np. po naciśnięciu guzika wyślij lub loguj. Dla przykładu to co zaobserwujemy po kliknięciu Loguj w przeglądarce:
Na tym rysunku widzimy adres strony jaką wywołaliśmy po wyciśnięciu Loguj
A tu widzimy jaki nagłówek został przesłany do serwera.
Uzbrojeni w takie informacje możemy wykorzystać pewne specyficzne mechanizmy narzędzia wget.exe do zalogowania a następnie do pobrania raportu.
Przykładowy skrypt takiej znajdujący się np. w pliku webget.cmd to:
@ECHO OFF wget --save-cookies cookies.txt --post-data "login=janek&password=123456789" -q "http://localhost/index.php?k=auth&a=auth&target=" wget --load-cookies cookies.txt --post-data "filtr_1=201006&filtr_2=844&sekcja=b&raport_n=compl&=undefined" --output-document=raport.csv -q "http://localhost/?k=raporty&a=GetReport&content=xls"
Wyjaśnienia mogą wymagać poszczególne opcje jakie zostały użyte podczas takiej operacji:
- --save-cookies cookies.txt - zapisuje wszystkie informacje pobrane podczas logowania do pliku
- --post-data "dane=vos" - wysyła dane do serwera udając formularz. Dane które są w przykładzie pochodziły z rysunku 2
- -q - wget.exe działa w trybie cichym, to znaczy że nie będzie wyświetlał wszystkich komunikatów
- "http://strona/" - adres URL strony którą pobieramy
- --load-cookies cookies.txt - pobieramy informacje o logowaniu z wcześniej przygotowanego pliku
- --output-document=raport.csv - zapisujemy wynik w pliku o konkretnej nazwie
Proszę zauważyć że zarówno dane dla --post-data jaki zam adres URL znajdują się między znakami " " - jest to konieczne do prawidłowego działania skryptu
Brak komentarzy:
Prześlij komentarz