這看起來可能有些倒退,但我想使用Perl(如果可能,請使用Curl)從使用Ajax的網站獲取數據以填充信息的HTML shell。如何讓這些Javascript調用來獲取我需要的數據?如何從使用AJAX的網站收集數據,並使用Perl?
該網站是在這裏:http://www.jigsaw.com/showContactUpdateTab.xhtml?companyId=224230
這看起來可能有些倒退,但我想使用Perl(如果可能,請使用Curl)從使用Ajax的網站獲取數據以填充信息的HTML shell。如何讓這些Javascript調用來獲取我需要的數據?如何從使用AJAX的網站收集數據,並使用Perl?
該網站是在這裏:http://www.jigsaw.com/showContactUpdateTab.xhtml?companyId=224230
記住Ajax調用普通的HTTP請求,因此你總是應該能夠執行它們。
你談論的網站上打開Firebug或Web Inspector中,你會看到一些XHR要求:
XHR加載完成:「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」
耶!現在你知道從哪裏得到這些數據,他們的腳本使用POST
HTTP請求的URL以上,所以如果你在瀏覽器中打開它們,你會看到各種引擎錯誤。你會看到下一個主體:
「callCount = 1 頁=/showContactUpdateTab.xhtml?companyId = 224230 httpSessionId = F5E7EC4A45DFCE87B969A9F4FA06C361 scriptSessionId = D020EFF4333283B907402687182D03E034 C0-SCRIPTNAME = UserActionAPI C0-方法名= getRecentlyGraveyardedContacts C0-ID = 0 C0-參數0 =編號:224230 C0-參數1 =布爾值:假 C0-param2的=布爾值:假 batchId = 1 「
我很確定,他們正在生成一堆安全會話ID以避免數據挖掘者。您可能需要深入瞭解JavaScript代碼以瞭解有關這些生成器的更多信息。
甜!在Firebug中找到參數並將其插入cURL的POST調用中。謝謝! –
我不知道...我完全刪除了scriptSessionID和httpSessionID,但仍然能夠獲取所有數據。他們是否有可能不跟蹤這些ID? –
他們可能會使用這些值在內部(使用JavaScript)將發送的ID與收到的ID進行比較,即跟蹤存儲請求的適當響應。 –
某些應用程序有代碼檢查客戶端是否是真正的AJAX客戶端。他們只是檢查標題X-Requested-With: XMLHttpRequest
的存在。所以很容易規避:
curl -H 'X-Requested-With: XMLHttpRequest' ...
use HTTP::Request::Common;
GET $url, 'X-Requested-With' => 'XMLHttpRequest', ...
當然,你可能要應對平常的東西,就像使用Cookies(用於會議),隨機數參數,偶爾的複雜性。其他瀏覽器的Firebug或類似軟件將幫助您對所需的標題和參數進行反向工程。
從網站的ToS:針對網站/服務的行爲。您不得嘗試或參與針對本網站或服務的潛在有害行爲,包括但不限於以下內容:...使用手動或自動軟件,設備,腳本機器人,其他方式或過程訪問「 ,「爬行」或「蜘蛛」網站中包含的任何網頁... – Ashley
@Ashley我已通知網站服務條款警察,他們來逮捕海報。 Sho:保持你的位置,把手從鍵盤上拿開。 – mikemaccana