在 asp.net 页面上自动提交表单
Posted
技术标签:
【中文标题】在 asp.net 页面上自动提交表单【英文标题】:auto submit a form on an asp.net page 【发布时间】:2012-02-28 22:34:37 【问题描述】:我想创建一个应用程序(在 .Net 中)填写并提交表单(在 asp.net 网站中)。
此应用程序应读取页面,找到字段(输入),提取我要填写的字段的名称/ID,并将页面提交给服务器。
我不想要一个拥有网络浏览器控件并在其上自动导航的应用!
我有什么:我有下载 html 的部分,我有找到字段并提取其名称/ID 的部分。
我需要什么:一种将表单提交到服务器的方法(POST,而不是 GET)。
在页面的 html 上,提交是通过 javascript 完成的,如下所示:
javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button1", "", true, "", "", false, false))
问题是:这种情况下如何提交?
【问题讨论】:
我会改为使用HttpWebRequest 类来检索和发布数据。 codeproject.com/Articles/6554/… @Zelter Ady:你知道watin.org。 【参考方案1】:您可以使用HttpWebRequest
/HttpWebResponse
对象向服务器发送/接收 HTTP 请求。收到响应后,查找要修改的各种 INPUT
字段,并使用各种字段构建 POST 请求数据块,例如
firstname=Joe&lastname=Doe&...
然后将此作为 POST 请求发送。您还需要构建一组适当的标头来模拟发送请求的真实浏览器,否则站点可能会拒绝正确处理。
您可以使用 Fiddler 首先导航到该站点并将请求保存在 Firefox 中,然后使用来自这些请求的信息来构建您的 HttpWebRequest
对象。
HttpWebRequest
可在同步和异步模式下工作,因此您可以使用几行代码下载页面,也可以控制整个下载过程。
【讨论】:
谢谢。我会尝试使用 Fiddler,也许这会帮助我构建请求。 @ZelterAdy Fiddler 在顶部有请求块,它将为您提供浏览器在 Fiddler 记录请求时随请求发送的所有标头。当您获取标头时,您必须将它们添加到请求对象的标头集合中,但其中一些不能作为键/值对添加 - 必须将它们设置为请求对象的属性.例如,UserAgent
不能作为标头添加 - HttpWebRequest
具有您必须设置的 UserAgent 字符串属性。【参考方案2】:
您可以使用 javascript 提交:
<script type="text/javascript">
document.forms["your_form_id"].submit();
</script>
【讨论】:
【参考方案3】:您可以在页面加载后放入 javascript 以提交表单。
document.forms[0].submit();
假设您在页面上只有一个表单,否则您可以将表单的名称放在forms[]
括号内的引号中。
【讨论】:
我不能用这个。正如我所说,我不使用浏览器来呈现代码,我只需要一个自动化工具来提交数据!【参考方案4】:我是否正确地说带有表单的页面不属于您的网站,并且您正在阅读外部网站上的某些表单?
如果您拥有所有字段,您是否还可以读取表单标签上的“操作”属性并使用您已经获得的所有键/值执行 POST 到同一位置?
您可以在服务器端代码中使用HttpWebRequest
来执行此操作,然后以这种方式发送 POST 数据。
http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx
【讨论】:
以上是关于在 asp.net 页面上自动提交表单的主要内容,如果未能解决你的问题,请参考以下文章