如何从网页上的多个表单中选择一个 POST 数据来使用 HttpClient?
How can you choose one of multiple forms on a webpage to POST data to using HttpClient?
我正在创建一种方法,可以访问我们的大学目录网站和 return select 学年的学位计划。这是我的代码,用于向 select 学年的下拉框发送 POST 请求。
// Post to catalog website to choose catalog year
HttpClient client = new HttpClient();
string catalogURL = "http://catalog.cpp.edu/index.php";
//Example choose 2015/16 catalog (value = "8")
//input parameter for drop down box in catalog
var parameter = new Dictionary<string,string>{ { "value", "8" } };
var encodedContent = new FormUrlEncodedContent(parameter);
var response = await client.PostAsync(catalogURL, encodedContent).ConfigureAwait(false);
if (response.StatusCode == HttpStatusCode.OK)
{
//get content:
var responseContent = await response.Content.ReadAsStringAsync ().ConfigureAwait (false);
//return html doc for catalog year
return responseContent;
}
但是,我认为它不起作用。它是 returning 默认页面的 html 文档,即 2016/17 目录,而不是 2015/16 目录。我认为它可能没有发布到正确的表单,因为在下拉框之前还有另一个:搜索栏。我做错了什么?
这是我想要访问的下拉框的源代码:
<form name="select_catalog" method="post" action="/index.php" style="margin: 0px">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr valign="top">
<td>
<select tabindex="201" name="catalog" title="select a catalog" id="select_catalog">
<option value="10" selected> 2016-2017 University Catalog</option>
<option value="8"> 2015-2016 University Catalog</option>
<option value="9"> 2014-2015 University Catalog</option>
<option value="5"> 2013-2014 University Catalog</option>
<option value="4"> 2012-2013 University Catalog</option>
</select>
</td>
*注意:页面的 url 与 select 年份无关,但课程计划的链接不同。
抱歉,如果这是一个愚蠢的问题,但我对 C# 或 .NET 没有太多经验
首先你不post一个表格,一个表格post一个URL。所以你已经掌握了大部分细节。您遇到的问题是:
- 您输入的名称不正确。而不是
value
它应该是 catalog
以匹配 select
输入的 name
属性。
您还缺少一个表单域:
<input type="submit" title="Select a Catalog" name="sel_cat_submit" value="GO" ...>
因此您只需将参数更改为:
var parameter = new Dictionary<string, string>
{
{ "catalog", "8" },
{ "sel_cat_submit", "GO" }
};
我正在创建一种方法,可以访问我们的大学目录网站和 return select 学年的学位计划。这是我的代码,用于向 select 学年的下拉框发送 POST 请求。
// Post to catalog website to choose catalog year
HttpClient client = new HttpClient();
string catalogURL = "http://catalog.cpp.edu/index.php";
//Example choose 2015/16 catalog (value = "8")
//input parameter for drop down box in catalog
var parameter = new Dictionary<string,string>{ { "value", "8" } };
var encodedContent = new FormUrlEncodedContent(parameter);
var response = await client.PostAsync(catalogURL, encodedContent).ConfigureAwait(false);
if (response.StatusCode == HttpStatusCode.OK)
{
//get content:
var responseContent = await response.Content.ReadAsStringAsync ().ConfigureAwait (false);
//return html doc for catalog year
return responseContent;
}
但是,我认为它不起作用。它是 returning 默认页面的 html 文档,即 2016/17 目录,而不是 2015/16 目录。我认为它可能没有发布到正确的表单,因为在下拉框之前还有另一个:搜索栏。我做错了什么?
这是我想要访问的下拉框的源代码:
<form name="select_catalog" method="post" action="/index.php" style="margin: 0px">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr valign="top">
<td>
<select tabindex="201" name="catalog" title="select a catalog" id="select_catalog">
<option value="10" selected> 2016-2017 University Catalog</option>
<option value="8"> 2015-2016 University Catalog</option>
<option value="9"> 2014-2015 University Catalog</option>
<option value="5"> 2013-2014 University Catalog</option>
<option value="4"> 2012-2013 University Catalog</option>
</select>
</td>
*注意:页面的 url 与 select 年份无关,但课程计划的链接不同。
抱歉,如果这是一个愚蠢的问题,但我对 C# 或 .NET 没有太多经验
首先你不post一个表格,一个表格post一个URL。所以你已经掌握了大部分细节。您遇到的问题是:
- 您输入的名称不正确。而不是
value
它应该是catalog
以匹配select
输入的name
属性。 您还缺少一个表单域:
<input type="submit" title="Select a Catalog" name="sel_cat_submit" value="GO" ...>
因此您只需将参数更改为:
var parameter = new Dictionary<string, string>
{
{ "catalog", "8" },
{ "sel_cat_submit", "GO" }
};