Как собрать данные с веб-сайта, использующего AJAX, с помощью Perl? - PullRequest
5 голосов
/ 23 августа 2011

Это может показаться немного отсталым, но я хочу использовать Perl (и Curl, если это возможно), чтобы получать данные с сайта, использующего Ajax, для заполнения HTML-оболочки информацией. Как мне сделать эти вызовы Javascript, чтобы получить данные, которые мне нужны?

Сайт здесь: http://www.jigsaw.com/showContactUpdateTab.xhtml?companyId=224230

Ответы [ 2 ]

4 голосов
/ 23 августа 2011

Помните, что вызовы 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"

Yay! Теперь вы знаете, где получить эти данные.Их сценарии используют POST HTTP-запрос к указанным выше URL-адресам, поэтому если вы откроете их в своем браузере, вы увидите различные ошибки движка.

Когда вы прослушиваете (например, через отладчик Web Inspector) их AJAXВ POST-запросах вы увидите следующее тело:

"callCount = 1 страница = / showContactUpdateTab.xhtml? CompanyId = 224230 httpSessionId = F5E7EC4A45DFCE87B969A9F4FA06C361 scriptSessionIdc0-id = 0 c0-param0 = номер: 224230 c0-param1 = логическое значение: false c0-param2 = логическое значение: false batchId = 1 "

Я уверен, что они генерируютбушельNch идентификаторов сеансов безопасности, чтобы избежать майнеров данных.Возможно, вам придется погрузиться в их коды JavaScript, чтобы узнать больше об этих генераторах.

2 голосов
/ 23 августа 2011

В некоторых приложениях имеется код для проверки того, что клиент является настоящим клиентом AJAX.Они просто проверяют наличие заголовка X-Requested-With: XMLHttpRequest.Так что это легко обойти:

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

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

Конечно, вам, возможно, придется иметь дело с обычными вещами, такими как обязательные файлы cookie (для сеанса), дополнительные параметры, случайная сложность.Firebug или что-то подобное для других браузеров поможет вам перепроектировать необходимые заголовки и параметры.

...