如何使用Perl从使用AJAX的网站收集数据?

时间:2011-08-22 21:24:10

标签: ajax perl data-mining

这可能看起来有点倒退,但我想使用Perl(如果可能的话,使用Curl)从使用Ajax的网站获取数据以填充带有信息的HTML shell。如何进行这些Javascript调用以获取我需要的数据?

网站位于:http://www.jigsaw.com/showContactUpdateTab.xhtml?companyId=224230

2 个答案:

答案 0 :(得分: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”

耶!现在您知道从哪里获取数据了。他们的脚本对上面的URL使用POST HTTP请求,因此如果您在浏览器中打开它们,您将看到各种引擎错误。

当您(例如,通过Web Inspector调试器)嗅探他们的AJAX POST请求时,您将看到下一个正文:

  

“callCount = 1   页= / showContactUpdateTab.xhtml?companyId = 224230   httpSessionId = F5E7EC4A45DFCE87B969A9F4FA06C361   scriptSessionId = D020EFF4333283B907402687182D03E034   C 0 = SCRIPTNAME UserActionAPI   C 0 = methodName中getRecentlyGraveyardedContacts   C0-ID = 0   C 0 =参数0号:224230   C 0 =参数1布尔值:假   C 0 = param2的布尔:假   batchId = 1   “

我很确定,他们正在生成一堆安全会话ID以避免数据挖掘者。您可能需要深入了解他们的JavaScript代码,以了解有关这些生成器的更多信息。

答案 1 :(得分:2)

某些应用程序具有代码来检查客户端是否是真正的AJAX客户端。他们只是检查是否存在标题X-Requested-With: XMLHttpRequest。因此很容易规避:

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

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

当然,您可能必须处理通常的内容,例如所需的cookie(用于会话),nonce参数,偶尔的复杂性。其他浏览器的Firebug或类似物将帮助您对所需的标题和参数进行反向工程。