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
我正在处理 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