这可能看起来有点倒退,但我想使用Perl(如果可能的话,使用Curl)从使用Ajax的网站获取数据以填充带有信息的HTML shell。如何进行这些Javascript调用以获取我需要的数据?
网站位于:http://www.jigsaw.com/showContactUpdateTab.xhtml?companyId=224230
答案 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或类似物将帮助您对所需的标题和参数进行反向工程。