Вопрос

Как некоторые из вас, возможно, знают, вы можете ПУБЛИКОВАТЬ с помощью C #.Это означает, что вы можете "нажимать" кнопки на веб-сайте с помощью webrequest / response.Теперь на сайтах также есть кнопки, которые работают с javascript, они начинаются следующим образом:

(function($j){
$j.data(document, 'maxPictureSize', 764327);
share_init();
})(jQuery.noConflict());

Есть ли какое-либо решение, с помощью которого вы можете выполнять эти вызовы функций на C #, например, с помощью httprequests или любой другой библиотеки?

Это было полезно?

Решение

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

Первый инструмент, который вам нужен, это Сетевой монитор Microsoft 3.3, или другой инструмент отслеживания сетевых пакетов.Используйте это, чтобы просмотреть СООБЩЕНИЕ с реальной веб-страницы.NetMon (по крайней мере) разбивает пакет на HTTP-фрагменты и заголовки, так что вы можете легко увидеть, что происходит.

Теперь вы будете знать, какие данные отправляет реальное сообщение, и URL, на который оно отправляет данные (с любой возможной "строкой запроса", что необычно для СООБЩЕНИЯ).

Далее вам нужно написать C #, чтобы создать такой же вид ПУБЛИКАЦИИ по тому же URL.Похоже, вы уже знаете о HttpWebRequest / HttpWebResponse, поэтому я не буду подробно их объяснять.Возможно, вы заметили в своем NetMon trace, что Тип содержимого заголовок был приложение/x-www-форма-urlencoded.Чаще всего это данные из HTML-формы, закодированной по URL (например, название), поэтому вам необходимо закодировать свои данные по URL перед их публикацией, и вам нужно знать размер закодированные данные для Содержание-Длина.HttpUtility.UrlEncode() - это один из методов, используемых для этой кодировки.

Как только вы решите, что у вас это есть, попробуйте и используйте NetMon для проверки вашего запроса POST и ответа от сервера.Продолжайте до тех пор, пока вы не продублируете то, что делает таинственная веб-страница.

Другие советы

Хорошо, используйте форму WebBrowser для загрузки страницы:

webBrowser.Navigate( url );

затем сохраните содержимое формы веб-браузера в файл или строку:

File.WriteAllText(@"c:\test\ajax_test.txt", webBrowser1.Document.Body.Parent.OuterHtml, Encoding.GetEncoding(webBrowser1.Document.Encoding));

теперь, если вы посмотрите на текстовый файл, в нем должны быть html-теги, которые вы ищете.

Даже при использовании JavaScript для создания POST где-то в JS есть POST, который работает так же, как кнопка submit .Вам просто нужно докопаться до места, где публикуется код JS, и посмотреть, как он это делает.Затем создайте тот же пост на C #.

Возьмем, к примеру, ASP.NET собственную функцию __doPostBack

var theForm = document.forms['aspnetForm'];
if (!theForm) {
    theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

Вы можете видеть, что он ищет форму, устанавливает несколько значений для полей ввода и выполняет отправку.В принципе, вам нужно заполнить те же значения для входных данных и отправить ту же форму, и вы уже сделали JS submit самостоятельно.

Вам нужно фиксировать запросы и заголовки, отправляемые этими кнопками, и имитировать их с помощью Запрос HttpWebRequest.Вы также могли бы взглянуть на Ватин если вы хотите автоматизировать действия пользователей на веб-сайтах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top