ASP.NET экран царапать сообщение Simulate

голоса
1

Я пытаюсь загрузить и анализировать HTML веб-страницы. Недавно сайт переехал источник от того, всех их информации на одной странице, чтобы пряча его часть за JavaScript. Там есть флажок «Показать все», который нуждается в активирован для просмотра всей страницы.

Вот сайт: Источник сайт

По существу, я ищу, чтобы автоматизировать получение этой страницы после того, как флажок была нажата. В настоящее время, у нас есть программа C, который загружает веб-страницы и обрабатывает наш синтаксический. Я не уверен, если он может принимать JavaScript в URL, если это может быть использовано для решения этой проблемы (я пытался использовать букмарклет для вызова JavaScript из URL, но я не смог заставить его обрабатывать флажок), но он может обрабатывать файлы, если это проще написать C # программу, которая может справиться с этим.

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


Edit: В принципе, как я могу автоматизировать вызов на JavaScript , который связан с что «Выделить все» флажок , чтобы я мог захватить HTML - страницу , содержащие все это, отображаемые после нажатия флажка.


Редактирование 2: Вот выход из Fiddler2:

__EVENTTARGET ctl00$ContentPlaceHolder1$GenericWebUserControl$ShowAllCheckBox
__EVENTARGUMENT
__LASTFOCUS
__VIEWSTATE (REMOVED DUE TO LENGTH)
__EVENTVALIDATION (REMOVED DUE TO LENGTH)
ctl00$ContentPlaceHolder1$GenericWebUserControl$Organization0 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Initial or Amendment1 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Relief Requested2 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Country3 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Status4 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$StartDate5  
ctl00$ContentPlaceHolder1$GenericWebUserControl$EndDate5    
ctl00$ContentPlaceHolder1$GenericWebUserControl$ShowAllCheckBox on

В настоящее время я получаю 500 ОШИБОК с сервера. Мне нужно, чтобы включить все эти GenericWebUserControls в запросе на пост, а также ли? Также мне нужно включить EVENTVALIDATION?


EDIT 3: Вот последний код. Я все еще получаю сервер 500 ошибок.

private void CreateRequest()
{
    HttpWebRequest httpWebRequest;
    HttpWebResponse httpWebResponse;
    StreamWriter streamWriter;
    Stream webResponseStream;
    StreamReader streamReader;
    string postData;
    string outputHTML;

    postData = String.Format(&__EVENTTARGET={0} + &__VIEWSTATE={1} + &__EVENTVALIDATION=(2)+&ctl00$ContentPlaceHolder1$GenericWebUserControl$ShowAllCheckBox=on +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Organization0=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Initial+or+Amendment1=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Relief+Requested2=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Country3=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Status4=ALL,EVENTTARGET, VIEWSTATE, EVENTVALIDATION);

    httpWebRequest = (HttpWebRequest)WebRequest.Create(http://services.cftc.gov/sirt/sirt.aspx?Topic=ForeignPart30Exemptions);
    httpWebRequest.Method = POST;
    httpWebRequest.ContentType = application/x-www-form-urlencoded;
    httpWebRequest.ContentLength = postData.Length;

    streamWriter = new StreamWriter(httpWebRequest.GetRequestStream(), System.Text.Encoding.ASCII);
    streamWriter.Write(postData);
    streamWriter.Close();

    httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

    webResponseStream = httpWebResponse.GetResponseStream();
    streamReader = new StreamReader(webResponseStream);
    outputHTML = streamReader.ReadToEnd();

    Console.WriteLine(outputHTML);
}

EDIT 4: Я определил , что это строка PostData , которая вызывает ошибку сервера 500. Если я делаю это пустая строка, она выводит всю веб - страницу. Кто - нибудь знает , если я правильно в том , чтобы положить все , что попадало от Fiddler2 , который имел значение в строке PostData? Кроме того , что __VIEWSTATE невероятно длинная строка. Существует ли ограничение или что - то я не уверен?


EDIT 5: Я побежал всех строк , используемых в PostData через URL кодировщик, но я все еще получаю сервера 500 ошибок. Есть ли способ для меня , чтобы отладить почему этот пост орган является недействительным?


РЕШЕНИЕ: Хорошо, я не мог получить мой PostData строки правильно, но когда я вставил в теле сырой POST работает. Это похоже , что это будет достаточно хорошо, но моя забота , если это будет продолжать работать.

Задан 23/07/2009 в 16:16
источник пользователем
На других языках...                            


2 ответов

голоса
3

Это страница с asp.net. При нажатии на флажок заставляет страницу быть размещены обратно на сервер. Таким образом, вместо того, чтобы пытаться имитировать JavaScript, что вы хотите сделать вместо этого имитировать запрос на почту.

Это , как известно , сложно со страницами ASP.Net, потому что обычно нужно заполнить скрытый ввод __VIEWSTATE. Я рекомендую использовать анализатор пакеты , как Скрипач для просмотра фактического запроса , как это было отправлено. Вы должны быть в состоянии скопировать ViewState оттуда.

Ответил 23/07/2009 в 16:22
источник пользователем

голоса
1

Это выглядит JavaScript инициирует POST на ту же страницу. Firebug показывает следующее в данных POST.

__EVENTTARGET: ctl00$ContentPlaceHolder1$GenericWebUserControl$ShowAllCheckBox

Это, вероятно, хорошее место, чтобы начать поиск.

Ответил 23/07/2009 в 16:25
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more