Несовместимая POSTing между веб-браузером и HttpWebRequest - PullRequest
1 голос
/ 19 июня 2010

Я работаю над Web Scraping, используя C # HttpWebRequest / HttpWebResponse. По большей части этот процесс прошел гладко. Но после того, как я прошёл через несколько страниц, я застрял с тем, что кажется несоответствием между тестированием с помощью веб-браузера и вызовами HttpWebRequest / HttpWebResponse.

Проблема возникает, когда я попадаю на страницу, содержащую элемент ввода с именем, похожим на это: «RidiculouslyLongInputName.RidiculouslyLongInputName.RidiculouslyLongInputName. @ RidiculouslyLong»

POSTing значение для этого элемента ввода вызывает ошибку 500 при использовании HttpWebRequest, но отлично работает при POSTing через браузер. Если я удалю это входное значение из данных поста, запрос HttpWebRequest не получит ошибку 500. Но потом я застрял с проблемой проверки данных с веб-сайта.

Есть идеи, почему HttpWebRequest не работает?

Ответы [ 4 ]

1 голос
/ 19 июня 2010

Это как раз те случаи, когда анализаторы пакетов оказываются чрезвычайно полезными для точного определения, через какие данные передаются данные и в чем разница.

http://www.wireshark.org/

Отличный инструмент для подобных вещей.

Отфильтруйте только те домены, которые вас интересуют, затем отправьте пакет с помощью HttpWebRequest. Сохраните данные пакета где-нибудь. Повторите, но сделайте запрос через браузер. Проверьте разницу.

Если это действительно проблема с переменными POST, это должно быть заметно в полезной нагрузке HTTP.

0 голосов
/ 06 января 2011

Первое спасибо за ответ MEF. Этот случай был личной ошибкой, поэтому я удалил вопрос.

Я думаю, что лучший инструмент для вашего случая - Fiddler , но я полагаю, что к этой кнопке прикреплен другой JavaScript или что-то подобное, что вам не хватает для имитации. WebRequest не может сделать это для вас, а WebBrowser может сделать, так как работает на DOM.

Для правильного использования WebRequest вам крайне необходимо перепроектировать каждый запрос, например, Fiddler. Очень трудно понять, что именно происходит, посмотрев на источник страницы (и на него ссылаются Javascripts / CSS ...).

0 голосов
/ 19 июня 2010

Вы также можете использовать расширение Firebug с Firefox. С этим расширением, установленным и включенным, пройдите весь сценарий в Firefox. FIrebug сообщит вам точный запрос / ответ, отправленный браузером. Затем вы можете максимально скопировать его, используя HttpWebRequest

0 голосов
/ 19 июня 2010

Не знаю, почему вы столкнулись с проблемой, но я бы порекомендовал взять копию Fiddler и посмотреть, что браузер отправляет в запросе POST.Возможно, происходит нечто менее очевидное.

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