C# Post 数据形成

C# Post data to form

我以前使用 Selenium 来自动化 Web 进程。然而,它并不总是工作可靠,更重要的是,它取决于不一定总是相同的屏幕尺寸。

现在我有一个这样的表格(非常简单):

<form type="POST" name="demoform">
  First name:<br>
  <input type="text" name="firstname"><br>
  Last name:<br>
  <input type="text" name="lastname">
</form>

以前,我会搜索输入名称并输入数据。但现在我想用不同的方式来做到这一点。我想知道如何通过 POST 发送数据以及如何获取网页的整个 HTML 结果。此外,我想知道后者是否只是一个 HTML 响应,或者它是否是实际用户会看到的页面 HTML。

试试这个...

  <form method="post" action="pagename" name="demoform">

      First name:<br>

      <input type="text" name="firstname"><br>

      Last name:<br>

      <input type="text" name="lastname">

      <input type="submit" value="Submit" />
    </form>

I previously used Selenium in order to automate web processes. However, it doesn't always work reliable and more importantly, it is dependent from the screen size

你并没有真正支持你关于可靠性的说法,但我不同意。我最近在一个使用 Selenium Chrome Driver 的项目上工作,没有遇到任何可靠性问题,也没有看到任何依赖于屏幕分辨率的问题?你一定做错了什么。无论如何,既然你想使用不同的技术,这里有一个关于你如何去做的快​​速信息:

Further I wonder if the latter is just a HTML response or if it's the the page's HTML that actual users would see

由于您刚刚起步,您应该为自己配备一个 Web 调试工具,例如 Fiddler。它允许您拦截和操纵 Web 请求和响应。网上有很多关于如何使用 Fiddler 的免费教程,所以请找到一个并快速掌握它——它不会花很长时间,而且 Fiddler 是那种你离不开的工具。长 运行 在网络开发或抓取期间。

下一步是熟悉 HttpClient (.NET 4.5+, or WebClient 早期版本)。它允许您使用完全可定制的 objects 与网站进行通信。您几乎可以调整请求或响应的任何方面:headers、cookie、协议等(因此它们都与 Fiddler 一致)。 class 已经包含了很多逻辑,因此您可以专注于对您来说最重要的事情,即 沟通

I wonder how to send data via POST and how to get the entire HTML result of the web page.

以下是使用 HttpClient 下载 html 字符串的方法:

public Task<string> GetHtmlAsync(string url)
{
    try
    {
        var t = Task.Run(async () => {
            using (var client = new HttpClient())
            {
                var response = await client.GetAsync(url);
                return await response.Content.ReadAsStringAsync();
            }
        });
        return t;
    }
    catch (HttpRequestException e)
    {
        return Task.FromException<string>(e);
    }
}

它与 POST 非常相似,但这已经在 Whosebug 上得到了回答:How to make HTTP POST web request