HttpWebRequest со страницами, которые динамически генерируют HTML из JavaScript? - PullRequest
2 голосов
/ 21 апреля 2011

Это вопрос из двух частей.Можно ли получить данные со страницы, которая динамически загружает контент через javascript, используя WebClient / HttpWebRequest?

Я также хотел бы узнать, как я мог бы использовать WebClient / HttpWebRequest для репликации XMLHttpRequest, как если бы вы выполняли его через javascript.

Редактировать: я захватил заголовки запроса, который яя пытаюсь выполнить репликацию, которая выглядит следующим образом: http://www.tagged.com/api/?application_id=user&format=json&session_token=6thk20fhv7d727emgdhfka6034

POST / api /? application_id = user & format = json & session_token = 6thk20fhv7d727emgdhfka6034 HTTP / 1.1 Хост: www.tagged.com

Принимаем: текстhtml, application / xhtml + xml, application / xml; q = 0,9, / ; q = 0,8 Accept-Language: en-us, en; q = 0,5

Accept-Encoding:gzip, deflate

Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7

X-Requested-With: XMLHttpRequest

Content-Type: application / x-www-form-urlencoded;charset = UTF-8

Длина содержимого: 88

connect_status = -1;__utmb = 50703532.0.10.1303366930

DNT: 1

Соединение: keep-alive

Прагма: no-cache

Cache-Control: no-cache

method = tagged.usermgmt.addFriend & uid_to_add = 5402501977 & api_signature = & track = 1mJ0lY7-W3

Я все понимаю вплоть до метода.Насколько я знаю, вы можете предоставить только GET или POST для HttpWebRequest.Method.Может ли кто-нибудь заполнить пробелы для меня?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

Если вы пытаетесь общаться с сервером так же, как это делает javascript, у вас могут быть некоторые варианты.

Сначала вы должны определить, как эти страницы взаимодействуют с сервером. Например, JSON или SOAP. Вы можете сделать это с помощью сетевого анализатора, такого как wireshark .

Как только вы это сделаете, вы можете отправить собственный запрос JSON на этот сервер, используя и проанализировать ответ JSON, используя один из доступных синтаксических анализаторов C # JSON, например JSON.NET .

Вы можете использовать аналогичный метод в случае SOAP. Имейте в виду, что им может не понравиться, если вы так разговариваете с их API.

2 голосов
/ 21 апреля 2011

Возможно ли получить данные со страницы, которая динамически загружает контент через javascript, с помощью WebClient / HttpWebRequest?

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

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

Смогу ли я использовать WebClient / HttpWebRequest для репликации XMLHttpRequest, как если бы вы выполняли его через javascript?

Если вы имеете в виду «Могу ли я использовать HttpWebRequest для выполнения HTTP-запроса, аналогичного AJAX-запросу, выполняемому клиентским JavaScript», тогда ответ будет положительным, однако, как именно вы это сделаете, будет зависеть от JavaScript и параметров, используемых для выполнить запрос AJAX.

В этой ситуации полезен инструмент веб-отладки (такой как Fiddler ), поскольку он позволяет вам проверять и сравнивать сделанный запрос.

...