2010-06-19 2 views
1

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

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

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

Любая идея о том, почему HttpWebRequest не работает?

ответ

1

Это время, подобное этим, когда пакетные снифферы очень полезны для просмотра того, какие данные проходят и какая разница.

http://www.wireshark.org/

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

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

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

0

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

0

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

0

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

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

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

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