niedziela, 18 lipca 2010

Wykorzystanie wget.exe do pobierania danych raportowych

W poprzednim poście pisałem o możliwości pobrania danych ze strony która wymaga logowania za pomocą loginu i hasła wpisywanego do formularza. Rozwiązanie bazowało na kodzie w VBA, co w pewnych sytuacjach jest nieco kłopotliwe do wykorzystania.

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