【问题标题】:Submit Form Using HttpClient Fails使用 HttpClient 提交表单失败
【发布时间】:2016-03-01 07:28:18
【问题描述】:

我正在尝试以编程方式在网页上提交表单。我正在我的 Wordpress 网站的评论表单上练习: http://www.smortazavi.com/games/before-eternity/contact/

这是基于on this post的代码:

private async void button_Click(object sender, RoutedEventArgs e)
{
    using (var client = new HttpClient())
    {
        var values = new Dictionary<string, string>
        {
           { "g16-name", "hello" },
           { "g16-email", "myemail@hotmail.com" },
            {"g16-comment", "comment" }
        };

        var content = new FormUrlEncodedContent(values);

        var response = await client.PostAsync("http://www.smortazavi.com/games/before-eternity/contact", content);

        var responseString = await response.Content.ReadAsStringAsync();
    }

    MessageBox.Show("Done!");   
}

当我运行代码时,responseString 包含填充的表单输入,但实际上并未提交表单。

你能说我在这里缺少什么吗?

【问题讨论】:

  • 代码似乎没问题。我在一个项目中使用几乎相同的东西。我会尝试关闭表单验证。也许验证会阻止提交 HttpClient 填充的输入字段。
  • 谢谢@maltmann,这只是一个测试,我想提交的实际表格是工作中的时间日志系统,我无法控制!而且,它需要用户登录系统,所以可能不太可能这样做! :/ 还是谢谢 ;-)

标签: c# forms submit httpclient


【解决方案1】:

快速浏览一下 HTML 显示该表单包含 2 个隐藏字段:

<input type="hidden" name="contact-form-id" value="16">
<input type="hidden" name="action" value="grunion-contact-form">

大概这些也需要通过。将上面的名称/值对添加到您的 values 字典中。

如果这仍然不起作用,请打开您选择的浏览器调试器(例如 Chrome 的 DevTools 中的“网络”选项卡),提交表单,并仔细检查发送的请求以确保 URL 正确且您'没有遗漏任何其他表单字段。您的代码看起来不错,因此您肯定缺少特定于该表单的详细信息。

【讨论】:

  • 非常感谢,是的,丢失的隐藏输入是问题所在!现在它正在工作! :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
相关资源
最近更新 更多