2011-08-22 2 views
5

Może to wydawać się nieco wstecz, ale chcę użyć Perla (i Curl, jeśli to możliwe), aby uzyskać dane z witryny, która używa Ajax do wypełnienia powłoki HTML informacjami. Jak wykonać te wywołania JavaScript, aby uzyskać potrzebne dane?Jak mogę zbierać dane z witryny korzystającej z AJAX z Perl?

Strona jest tutaj: http://www.jigsaw.com/showContactUpdateTab.xhtml?companyId=224230

+1

Z witryn ToS: Działa przeciwko witrynie/usługom. Nie wolno podejmować prób potencjalnie szkodliwych działań skierowanych przeciwko Witrynie lub usługom, w tym między innymi: ... Używać ręcznego lub zautomatyzowanego oprogramowania, urządzeń, skryptów, robotów, innych środków lub procesów, aby uzyskać do nich dostęp. , "" Przeszukiwanie "lub" pająk "dowolne strony zawarte w Witrynie ... – Ashley

+1

@Ashley, dziękuję za poinformowanie mnie o swoich ToS, a ja poinformuję mojego szefa. On/jego prawnicy podejmie odpowiednią decyzję w oparciu o to.Ale jak zawsze ten post jest wyłącznie do celów edukacyjnych. –

+0

@Ashley Poinformowałem policję o Warunkach świadczenia usług, przyjeżdżają, aby aresztować plakat. Sho: pozostań tam gdzie jesteś i wyjmij ręce z klawiatury. – mikemaccana

Odpowiedz

4

Pamiętaj, że połączenia są zwykłymi AJAX żądania HTTP, dzięki czemu zawsze powinien być w stanie je wykonać.

Otwarte Web Inspector Firebug lub na stronie internetowej mówisz, zobaczysz niektóre XHR wzywa:

XHR zakończeniu ładowania: „http://www.jigsaw.com/dwr/interface /UserActionAPI.js ". "http://www.jigsaw.com/dwr/call/plaincall/UserActionAPI.getMostPurchasedContacts.dwr". "http://www.jigsaw.com/dwr/call/plaincall/UserActionAPI.getRecentlyGraveyardedContacts.dwr " http://www.jigsaw.com/dwr/call/plaincall/UserActionAPI.getRecentlyAddedContacts.dwr ". " http://www.jigsaw.com/dwr/call/plaincall/UserActionAPI.getRecentlyTitleChangedContacts.dwr”

Yay! teraz wiesz gdzie uzyskać te dane. Ich skrypty używać POST żądanie HTTP do adresów URL powyżej, więc jeśli otworzysz je w przeglądarce, zobaczysz różne błędy silnika:

Podczas sniffowania (np. za pośrednictwem debugera Web Inspector) ich żądań AJAX POST, zobaczysz następną treść:

„callCount = 1 strona =/showContactUpdateTab.xhtml? CompanyId = 224230 httpSessionId = F5E7EC4A45DFCE87B969A9F4FA06C361 scriptSessionId = D020EFF4333283B907402687182D03E034 C0-Nazwa_skryptu = UserActionAPI C0-methodName = getRecentlyGraveyardedContacts C0-id = 0 c0- param0 = numer: 224230 C0-param1 = logiczna false C0-param2 = logiczna false Identyfikator partii = 1 "

Jestem prawie pewien, że generują kilka identyfikatorów sesji bezpieczeństwa, aby uniknąć górników danych. Być może będziesz musiał zanurkować w swoich kodach JavaScript, aby dowiedzieć się więcej o tych generatorach.

+0

Słodki! Znaleziono parametry w Firebug i podłączono je do wywołania POST w cURL. Dzięki! –

+0

Nie wiem ... Całkowicie usunąłem scriptSessionID i httpSessionID i nadal byłem w stanie uzyskać wszystkie dane. Czy to możliwe, że nawet nie śledzą tych identyfikatorów? –

+0

Istnieje możliwość, że używają tych wartości do wewnętrznego (w JavaScript) porównywania wysłanych identyfikatorów z odebranymi, tj. Do śledzenia odpowiednich odpowiedzi na przechowywane żądania. –

2

Niektóre aplikacje posiadają kod w celu sprawdzenia, czy klient jest prawdziwym klientem AJAX. Po prostu sprawdzenie obecności nagłówka X-Requested-With: XMLHttpRequest. Więc jest to łatwe do ominięcia:

curl -H 'X-Requested-With: XMLHttpRequest' ... 

use HTTP::Request::Common; 
GET $url, 'X-Requested-With' => 'XMLHttpRequest', ... 

Oczywiście, można mieć do czynienia ze zwykłymi rzeczami, jak wymaganych ciasteczek (dla sesji), parametrów nonce, okazjonalne złożoności. Firebug lub podobne dla innych przeglądarek pomoże ci w odwrotnej inżynierii wymaganych nagłówków i parametrów.

Powiązane problemy