如何使用 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。
我想使用下拉列表中列出的日期从 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。