C# Создание формы ответа сайта с помощью WebRequest - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть устройство со встроенной сетью GUI, доступное через его IP-адрес. Я пытаюсь иметь возможность программно манипулировать вводами на устройстве с помощью консольного приложения. Страница входа в систему устройства (https://192.168.x.x/login.html) содержит следующую форму:

<form class="settingNameTxt" method="post" action="back.shtml">
    <table>
        <tr>
            <td>Password:</td>
            <td><input type="password" size="8" maxlength="8" name="Password"></td>
        </tr>
        </table>
        <br/>
    <input type="submit" value="Submit"/>
    <input type="reset"/>
/form>

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

1 Ответ

0 голосов
/ 20 февраля 2020

Я проверил различные способы решения этой проблемы и набросал некоторый код

class Program
{
    static void Main(string[] args)
    {
        string command = string.Empty;
        while (command != "exit")
        {
            Console.Write("# ");
            command = Console.ReadLine();
            switch (command)
            {
                case "go":
                    Thread t = new Thread(() =>
                    {
                        WebBrowser browser = new WebBrowser();
                        browser.DocumentCompleted += Browser_DocumentCompleted;
                        browser.Navigating += Browser_Navigating;
                        browser.Navigate("http://localhost"); // set url here
                        Application.Run();
                    });
                    t.SetApartmentState(ApartmentState.STA);
                    t.Start();
                    t.Join();
                    break;
            }
        }
        Console.WriteLine("Bye! Press any key...");
        Console.ReadKey();
    }
    private static void Browser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    {
        Console.WriteLine("Navigating: {0}", e.Url);
    }
    private static void Browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (sender is WebBrowser browser)
        {
            Console.WriteLine("Loaded: {0}", e.Url);
            HtmlDocument doc = browser.Document;
            // do your job here with DOM of the HtmlDocument
            Console.WriteLine(doc.Body.InnerHtml);
            // additionally you may call browser.navigate here again and return; avoiding ExitThread
        }
        Application.ExitThread();
    }
}

Эта программа загружает и показывает HTML веб-страницы с использованием WinForms WebBrowser Control (Inte rnet Explorer). Я подписал комментарий, в котором предлагал добавить обработку HtmlDocument, полученную из Интернета.

Чтобы сделать это более понятным, есть способ отправить форму, вызывая Click() кнопки Отправить. Это похоже на то, что вы можете делать почти так же программно, как пользователь может делать это вручную в обычном браузере.

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