C# 从 Webclient 单击 HTML 按钮

C# Click HTML Button from Webclient

我正在处理 Windows 表单应用程序。我希望 webclient post 来自 NameValueCollection 的值,然后点击提交按钮。但现在它只将值添加到 html 但从不提交它们。我怎样才能模拟这个按钮点击?

private void button2_Click(object sender, EventArgs e)
        {
            var requestData = new NameValueCollection
            {
                {"prodids", "somevalue" },
                {"customerid", "somevalue" },
                {"submit_button", "submit" }
            };
            byte[] request = client.UploadValues("myurl", "POST", requestData);
            string result = Encoding.UTF8.GetString(request);

您需要获取包含您按钮的 <form> 元素,然后获取其 action 属性。这是您的客户应该向其发出请求的 URL。您可能还需要获取 action 属性以确定是发出 GET 还是 POST 请求。

问题是,按钮本身并不重要:在网络浏览器中,如果它有操作 "submit" 它只是触发包含表单序列化内容并将它们发送到 action url 使用`方法。

当您使用客户端与网页交互时,您不能将其视为网络浏览器,而更像是下载页面并使用文本编辑器打开它。什么都不可点击,没有 JS,甚至什么都没有呈现 - 它只是从服务器发送的原始内容。

编辑:

所以,这完全是用JavaScript来做的,这是各种错误。无论如何,您的方法是 POST,您的操作是 /View/DashboardProxy.php?location=Dashboard/RequestServlet&postdata=1,因此您的调用将是: byte[] request = client.UploadValues("/View/DashboardProxy.php?location=Dashboard/RequestServlet&postdata=1", "POST", requestData);

请注意,响应不会是整页,但可能没有任何内容或一些文本可放入 post_result_textarea

哦,还要注意在那个 POST 请求中传递了超过 3 个值 - 值来自:server_id、prodids、shopid、customerid 和 specialbids。可能服务器要求填写所有这些字段。

您可以将 AJAX 与 WebMethod 一起使用。 (此示例对 ajax 请求使用 jQuery,但您也可以使用 plan vanilla javascript 执行此操作)

$.post({
  type: "POST",
  url: /Default.aspx/methodX,
  data: data,
  dataType: dataType
}).done(function(data){
  if (data === true) {
    console.log('everything worked out fine.')
  }
});

并使用以下内容编辑您的 .cs 文件。

[WebMethod]
public bool methodX(string data) {
  var requestData = new NameValueCollection
  {
    {"prodids", "somevalue" },
    {"customerid", "somevalue" },
    {"submit_button", "submit" }
  };
  byte[] request = client.UploadValues("myurl", "POST", data);
  string result = Encoding.UTF8.GetString(request);

  return true;
}

或类似的..希望你能从中得到一个想法。


阅读更多
http://api.jquery.com/jquery.post
https://msdn.microsoft.com/en-us/library/4ef803zd(v=vs.90).aspx