如何使用 Webclient / HttpClient 以编程方式获取数据?

How to get the data programatically using Webclient / HttpClient?

我想使用下拉列表中列出的日期从 https://eauction.ccmc.gov.in/frm_scduled_items.aspx 下载数据。

    private async Task Cbetest()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("https://eauction.ccmc.gov.in");
            var content = new FormUrlEncodedContent(new[]
        {
            new KeyValuePair<string, string>("ctl00$ContentPlaceHolder1$gridedit$ctl14$ctl02","17/02/2016")
        });
            var result = await client.PostAsync("/frm_scduled_items.aspx", content);
            string resultContent = await result.Content.ReadAsStringAsync();
            Console.WriteLine(resultContent);
        }
    }

我要下载上图的数据

您需要做一些额外的工作来模拟 post 以开始对 ASP.NET WebForms 应用程序进行抓取。大多数情况下,您将需要传递有效的 ViewState 和 EventValidation 参数,您可以从初始 GET 请求中检索这些参数。

我正在使用 HTML Agility Pack 来简化对初始响应的解析,如果您打算抓取 HTML,我建议您研究一下 HTML。

以下似乎可以得到您要查找的结果,尽管我没有在回复中看得太深 HTML。

using(var client = new HttpClient())
{
    client.BaseAddress = new Uri("https://eauction.ccmc.gov.in");

    var initial = await client.GetAsync("/frm_scduled_items.aspx");

    var initialContent = await initial.Content.ReadAsStringAsync();

    var htmlDoc = new HtmlDocument();

    htmlDoc.LoadHtml(initialContent);

    var viewState = htmlDoc.DocumentNode.SelectSingleNode("//input[@id='__VIEWSTATE']").GetAttributeValue("value", string.Empty);
    var eventValidation = htmlDoc.DocumentNode.SelectSingleNode("//input[@id='__EVENTVALIDATION']").GetAttributeValue("value", string.Empty);

    var content = new FormUrlEncodedContent(new Dictionary<string, string>{
        {"__VIEWSTATE", viewState},
        {"__EVENTVALIDATION", eventValidation},
        {"ctl00$ContentPlaceHolder1$drp_auction_date", "17/02/2016"}
    });

    var res = await client.PostAsync("/frm_scduled_items.aspx", content);

    var resContent = await res.Content.ReadAsStringAsync();

    Console.WriteLine(resContent);
}

从那里您需要解析结果 table 以获得有用的信息。如果您想遍历 DataGrid 的页面,您将需要获取更新的 EventValidation 和 ViewState 值并为每个页面模拟额外的 posts。