Проблема с получением Curl Ajax-данных - PullRequest
0 голосов
/ 19 августа 2010

Я пытаюсь получить «Добавленные контакты» на этой странице :

Данные вводятся с помощью Ajax-вызова, и я использовал Wireshark для захвата вызова, который, я думаю,получает данные:

POST /dwr/call/plaincall/UserActionAPI.getRecentlyTitleChangedContacts.dwr HTTP / 1.1

Это отправляет кучу переменных и cookie, и поэтому я сделал вызов curl сследующая строка:

curl -b "cookiejar.txt" -v -e "http://www.jigsaw.com/showContactUpdateTab.xhtml?companyId=212324" \
    -F "type=text/plain&callCount=1&page=/showContactUpdateTab.xhtml?companyId=212324&httpSessionId=9CDBDA38B4F0C2A84622B523E79C0C38&scriptSessionId=784885169D0457ECDCA26FEF7B6DD7CF305&c0-scriptName=UserActionAPI&c0-methodName=getRecentlyAddedContacts&c0-id=0&c0-param0=number:212324&c0-param1=boolean:false&c0-param2=boolean:false&batchId=0" \
    "http://www.jigsaw.com/dwr/call/plaincall/UserActionAPI.getRecentlyAddedContacts.dwr"

Но она всегда возвращает , что похоже на более JS-скрипт , хотя я вижу правильные данные, возвращаемые в Wireshark.Я долго обдумывал это, но все еще не могу найти способ получить данные.Помощь

1 Ответ

3 голосов
/ 19 августа 2010

Вы пытаетесь очистить HTML-страницу с поддержкой Ajax, используя curl.

Это амбициозно, поскольку исходная страница достигает определенного состояния (получение сеанса с сервера, файлы cookie и т. Д.), А затем выполняет вызов ajax.

Вам нужно точно подражать тому, что делает страница.

Например, вызов одновременно отправляет файлы cookie с идентификатором сеанса и , отправляя такой же идентификатор сеанса в качестве одного из его параметров публикации. - Таким образом, вам нужно посмотреть на входящее значение cookie, чтобы правильно создать исходящий параметр Post. Я не знаю, как бы вы сделали это, используя только curl.

Я полагаю, что вам, возможно, придется использовать Perl Mechanize или какую-либо другую более эффективную систему очистки при работе с этим веб-сайтом.

Также обратите внимание, что сервер возвращает нужные данные в виде фрагмента JS, , а не в виде JSON. Поэтому вам нужно будет проанализировать ответ, как только вы сможете убедить сервер предоставить его вам.

Добавлено: Вы можете попробовать вкладку «Сеть» в Firebug и Fiddler в дополнение к Wireshark, чтобы увидеть различия между исходной страницей и ее эмуляцией.

Достойный проект ...

Добавлено в ответ на комментарий о том, что Perl Mechanize не поддерживает Javascript:

Вам не нужна ваша программа очистки для выполнения Javascript. Ваша программа должна эмулировать взаимодействие HTML-страницы с сервером. Если ваша программа отправляет на сервер те же биты, что и настоящая HTML-страница, когда она запускается в браузере, сервер ответит нужными вам данными.

Поскольку данные не отвечают, вы не отправляете одинаковые биты.

Вы должны начать именно с эмуляции браузера. Например, отправьте те же заголовки в ваших запросах, в том числе пользовательский агент, принимает и другие заголовки. Сервер может их проверять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...