2012-05-07 2 views
0

Сценарий: У меня есть внутренний сайт ASP.NET, который позволяет мне поддерживать набор правил (CRUD). Чтобы добавить новое правило, я просто заполняю форму HTML и нажимаю submit. Моя текущая проблема заключается в том, что теперь мне нужно добавить несколько сотен правил, и я хочу использовать сценарий для автоматизации этого.Сценарий Bash для автоматизации представления формы ASP.NET?

Первоначальный план:

  • Создайте сценарий, который может принимать X число аргументов и использовать эти поддельные формы представленню вышеуказанного веб-страницы
  • Создание разделенных запятыми файл (или аналогичный) с одной строкой на каждое правило, и каждый столбец представляет собой один из входных тегов в HTML-форме.
  • Создайте еще один скрипт, который может использовать файл с разделителями-запятыми для выполнения сценария формы для каждой строки.

Мои попытки были сосредоточены вокруг завитка и хорошо работали против online testing page. К сожалению, я не могу заставить его работать против страницы ASP.NET, и я предполагаю, что это должно что-то сделать с помощью Postback и/или Viewstate.

Отрывок:

curl -s -u "DOMAIN\user:password" --ntlm -d "key1=value1" -d "key2=value2" http://internal/page.aspx 

(Возвращает страницу, как при использовании GET, никаких сообщений об ошибках)

Вопрос:

Как я могу обмануть страницу ASP, что я 'm посылка Postback? (Альтернативные предложения сценариев приветствуются, а)

EDIT:

Отрывок из ASP страницы:

<asp:LinkButton ... runat="server" OnClick="lbAddRule_Click" PostBackUrl="~/Page.aspx" /> 

Отрывок из кода позади:

protected void lbAddRule_Click(object sender, EventArgs e) { 
    if (Page.IsValid == true) { 
    AddRule(x,y,z); 
+0

Вам нужен фактический постбэк или просто пост (это то, что вы хотите быть в состоянии проверить, если у вас есть доступ к источнику страницы)? Хорошим первым ударом будет проанализировать поле ввода ViewState (или полей) со страницы и отправить их вместе с вашим запросом. Этого может быть достаточно, чтобы страница подумала, что это обратная передача.Кроме того, если это довольно прямолинейный CRUD, было бы проще просто вставить материал непосредственно в любую базу данных, поддерживающую это приложение? – R0MANARMY

+0

@ R0MANARMY Я добавил фрагменты кода с веб-страницы. Кажется, мое предположение о том, что предложение if (Page.IsPostBack) было немного преждевременным, хотя я не приблизился к решению. К сожалению, у меня нет доступа к базе данных, что упростило бы скрипты. – erikxiv

+0

Если вы действительно не хотите делать это вручную, вы можете попробовать записать несколько регулярных сообщений с помощью firebug, видя, какие переменные изменяются (в идеале только поля, которые вы хотите отправить), создайте шаблон и отправьте все, что вам нужно. – R0MANARMY

ответ

2

Принимая совершенно иной подход, считаете ли вы, что скрипт сам браузер? Есть несколько очень мощных методов, в том числе Selenium/WebDriver [1] и iMacros [2], оба из которых позволяют использовать этот сценарий.

[1] http://seleniumhq.org/docs/03_webdriver.html

[2] http://wiki.imacros.net/Browser_Automation

+2

Загрузил плагин в Internet Explorer, просмотрел несколько своих демо-макросов и получил его работу (вытаскивание данных из файла CSV) в течение часа. Отлично! – erikxiv

+0

Иногда вам просто нужен другой подход! Рад, что он работает. –

1

Если это предназначено в качестве служба RESTful (к которой вы обращаетесь к ней как), вы можете захотеть переписать страницу, которая в настоящее время обрабатывает форму чтобы быть Web Service. Затем вы можете использовать curl для доступа к тому, что хотите, и переформатировать свою форму, чтобы все было по-прежнему.

+0

Теоретически, да, я могу изменить веб-приложение, чтобы предоставить интерфейс REST или веб-сервиса. Тем не менее, я неохотно делаю это из-за большого количества усилий. – erikxiv

+1

Усилия, которые вы потратите на рефакторинг кода на веб-службу, будут намного меньше, чем головная боль, связанная с вычислением и поддержкой точного списка автогенерируемого кода __VIEWSTATE, необходимого для взаимодействия с формой ASP.NET. См. Также http://stackoverflow.com/questions/8786362/using-curl-for-post-data-to-asp-net-page - это некрасиво. –

+0

@erikxiv Дэвид прав, веб-сервис - ваш лучший вариант. – jrummell

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