2014-10-04 4 views
1

Прошло много исследований, но теперь им грустно застряло.Загрузите домашнюю страницу, где аргумент POST генерируется из javascript

Мне нужно скачать html-страницу: Для этого я заполняю разные данные в форме и нажимаю кнопку отправки, а затем я хотел бы сохранить ответы.

Использование Firebug Я могу видеть, что мои данные заполнены и отправляются через POST. К несчастью, есть еще один аргумент, что я не могу отследить , как он сгенерирован, и без этого последнего аргумента я не получаю адекватный html-ответ, а страницу с ошибкой.

wget и curl (файлы cookie, useragent, header, referrer) завершаются без последнего параметра!

Я не слишком знаком с jquery и javascript, поэтому я не могу найти, откуда поступают данные, но если браузер знает это, я тоже должен быть в состоянии!

Я нашел, что это похоже, только мой, кажется, сложнее, как генерируется поле: wget : get field info before sending post-data

В моем случае я проследил его к этому:

<script type="text/javascript"> 
$(document).ready(function(){ 
$.get('/getmyData.asp?str=erServiceXUVC',function(string){ 
$('#oikuZR').append('<input type="hidden" name="lsXUVp" value="'+ string +'">'); 
}); 
}); 
</script> 

и отличие от использования реальной браузер и wget (даже с помощью агента пользователя и т. д.) - это потому, что я не могу получить это значение, которое появляется, если я использую обычный браузер.

<input type="hidden" value="34928321" name="lsXUVp"> 

Это именно то значение, которое мне нужно (по сравнению с POST Firebug)! Но ....

Здесь мои знания заканчиваются.

  • Не удается найти «34928321» в коде
  • «#oikuZR» не показывает в списке DOM из поджигатель, но, может быть, я делаю что-то неправильно (есть тысячи записей)
  • Отладочные в приведенном выше сценарии я могу видеть, что строка = 34928321 как локальная переменная, но я не вижу, откуда эта функция называется
  • Если я открою www.homepage.com/getmyData.asp?str=erServiceXUVC (с параметрами или без них) есть только страница с ошибкой.

Мысль об использовании Splash в качестве прокси-сервера для запуска JavaScript для меня, и чем WGET этой страницы, но так как я не понимаю механику пока Im сомнительны.

Так что я могу сделать?

Возможно, браузер, поддерживающий javascript, который принимает команды из командной строки: open, fillout, send, saveHtml? Альтернативы? Решения для wget (любимый!)?

ответ

1

Я думаю, что этот вызов добавлен, чтобы предотвратить (или, по крайней мере, сделать сложнее) выполнение того, что вы пытаетесь сделать.

Весь фокус в этой строке:

$.get('/getmyData.asp?str=erServiceXUVC',function(string){ 
    .. 
}); 

Эта строка выполняет запрос AJAX. Когда запрос завершается успешно, вызывается функция обратного вызова, и ответ передается в аргумент string.

Таким образом, хотя этот запрос генерируется код, который затем отправляется обратно с формой. Я не могу быть уверен, не проверяя фактическую среду, но я думаю, что запрос AJAX зависит от сеанса (возможно, через файл cookie). Без этого сеанса он может генерировать сообщение об ошибке.

Чтобы обойти это, вам нужно будет получить страницу и любые файлы cookie, которые приходят с ней. Затем при запросе кода используйте одни и те же файлы cookie, чтобы сервер видел этот запрос как в том же сеансе.

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

+0

Блестящий! Не могли бы вы добавить, как сделать запрос ajax? Я сохранил cookie-файлы cookie сеанса из первого wget в файле, а второй wget должен использовать те, у которых последний параметр magic, чтобы получить реальные данные. – Stefan

+0

С точки зрения сервера, запрос AJAX не является чем-то особенным. Это обычный запрос, только обычно в запросе добавляется заголовок «X-Requested-With'». Это может использоваться сервером для определения того, является ли это запросом AJAX. Поэтому, используя wget, просто выполните обычный запрос и при необходимости добавьте этот заголовок. – GolezTrol

+0

Работал! Нашел способ, по которому Firefox отправляет заголовок для XRequest в консоль Firebug: также отправил куки и получил результат как простой обычный текстовый номер в html-файле. В начале я забыл, что /getmyData.asp является абсолютным (www.homep.com/getmyData.asp), а не относительно подстраницы. Но все же они каким-то образом сохраняют данные обратно с помощью wget (я уже подделываю каждый заголовок и POST-аргумент FF посылает - очень странно/умно, что они все еще могут различать): Возможно, мне придется использовать iMacros для простого поведения пользователя или альтернативного ParseHub – Stefan

Смежные вопросы