2011-08-22 23 views
5

這看起來可能有些倒退,但我想使用Perl(如果可能,請使用Curl)從使用Ajax的網站獲取數據以填充信息的HTML shell。如何讓這些Javascript調用來獲取我需要的數據?如何從使用AJAX的網站收集數據,並使用Perl?

該網站是在這裏:http://www.jigsaw.com/showContactUpdateTab.xhtml?companyId=224230

+1

從網站的ToS:針對網站/服務的行爲。您不得嘗試或參與針對本網站或服務的潛在有害行爲,包括但不限於以下內容:...使用手動或自動軟件,設備,腳本機器人,其他方式或過程訪問「 ,「爬行」或「蜘蛛」網站中包含的任何網頁... – Ashley

+0

@Ashley我已通知網站服務條款警察,他們來逮捕海報。 Sho:保持你的位置,把手從鍵盤上拿開。 – mikemaccana

回答

4

記住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代碼以瞭解有關這些生成器的更多信息。

+0

甜!在Firebug中找到參數並將其插入cURL的POST調用中。謝謝! –

+0

我不知道...我完全刪除了scriptSessionID和httpSessionID,但仍然能夠獲取所有數據。他們是否有可能不跟蹤這些ID? –

+0

他們可能會使用這些值在內部(使用JavaScript)將發送的ID與收到的ID進行比較,即跟蹤存儲請求的適當響應。 –

2

某些應用程序有代碼檢查客戶端是否是真正的AJAX客戶端。他們只是檢查標題X-Requested-With: XMLHttpRequest的存在。所以很容易規避:

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

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

當然,你可能要應對平常的東西,就像使用Cookies(用於會議),隨機數參數,偶爾的複雜性。其他瀏覽器的Firebug或類似軟件將幫助您對所需的標題和參數進行反向工程。

相關問題