【问题标题】:How can you choose one of multiple forms on a webpage to POST data to using HttpClient?如何在网页上选择多种形式之一来发布数据以使用 HttpClient?
【发布时间】:2016-11-11 01:48:36
【问题描述】:

我正在创建一个方法,该方法将访问我们的大学目录网站并返回所选学年的学位计划。这是我向下拉框发送 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;
        } 

但是,我认为它不起作用。它返回默认页面的 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都是一样的,但是到课程计划的链接是不同的。

对不起,如果这是一个愚蠢的问题,但我对 C# 或 .NET 没有太多经验

【问题讨论】:

  • 我建议您使用 javascript/ajax 在某种形式的页面上发布您想要的数据。你可以通过在 jquery 的帮助下使用它的 name 属性来定位它。您甚至可以使用该方法定位特定字段或输入元素。

标签: c# php html asp.net .net


【解决方案1】:

首先,您不发布到表单,表单发布到 URL。所以你已经掌握了大部分细节。您遇到的问题是:

  1. 您错误地命名了输入。而不是value,它应该是catalog,以匹配select 输入的name 属性。
  2. 您还缺少一个表单域:

    <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" }
};

【讨论】:

  • 非常感谢!这是完美的!
猜你喜欢
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多