我正在做一些自动化工作,可以绕过一个站点并发布到HTML表单,但现在我遇到了一个新的挑战,Ajax表单.
由于没有可读的源代码,我想知道是否可以在C#中以progamatically方式填写Ajax表单.我目前正在使用不可见的axWebBrowser.
在此先感谢您的帮助!
是的,但我建议使用不同的方法来请求/响应服务器页面,包括常规页面和AJAX处理程序页面.
在c#中,尝试使用WebRequest/WebResponse或更专业的HttpWebRequest/HttpWebResponse类.
对于允许Javascript向服务器发出HTTP请求的技术而言,Ajax只不过是一个"花哨"的名称,该服务器通常实现一些处理程序,这些处理程序为Javascript调用程序生成专门的轻量级内容(通常编码为JSON).
因此,为了模拟AJAX调用,您所要做的就是检查目标应用程序(您想要"发布"到的网页)并查看用于AJAX通信的格式 - 然后从C#复制页面的Javascript行为使用WebREquest/WebResponse类.
请参阅Firebug - 一个很棒的工具,它允许您检查网页以确定它所做的调用,哪些页面以及这些页面响应的内容.它在检查AJAX调用方面做得非常好.
以下是如何执行Web请求的一个非常简单的示例:
HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create("http://www.mysite.com"); using (HttpWebResponse resp = (HttpWebResponse)wReq.GetResponse()) { // NOTE: A better approach would be to use the encoding returned by the server in // the Response headers (I'm using UTF 8 for brevity) using (StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.UTF8)) { string content = sr.ReadToEnd(); // Do something with the content } }
POST也是一个请求,但使用不同的方法.有关如何执行非常简单的帖子的示例,请参阅此页面.
编辑 - 有关使用Firebug检查页面行为的详细信息
通过检查您尝试复制的页面,我的意思是使用工具(我使用Firebug - 在Firefox上)来确定页面和服务器之间的信息流.
使用Firebug,您可以使用"Net"和"Console"面板执行此操作."Net"面板列出了加载页面时浏览器执行的所有请求.而"控制台"将列出页面加载后发生的页面与服务器之间的通信.页面加载后发生的那些通信本质上是您要复制的AJAX调用(注意:必须在Firebug中对网络监视进行调整才能使其正常工作)
查看Michael Sync的教程,了解有关Firebug的更多信息,并使用Console面板进行实验,以了解有关AJAX请求的更多信息.
关于"使用WebRequest/WebResponse从C#复制页面的行为" - 您必须意识到的是,就像我之前所说的,Javascript AJAX调用只不过是HTTP请求.这是一个HTTP请求,Javacript在网络服务器"幕后"或带外进行.为了复制这个,它与复制正常的GET或正常的POST没有什么不同,如上所示.这就是Firebug的用武之地.使用它,您可以查看请求,就像Javascript生成它们一样 - 查看"控制台"面板,查看请求消息的外观.
然后你可以使用与上面相同的技术,使用HttpWebRequest/HttpWebResponse来生成与Javascript相同类型的请求,而只使用C#来实现.
Gregg,我希望这能澄清我的答案,但除此之外,我建议玩Firebug并且可能更多地了解HTTP协议的工作方式以及AJAX如何作为一种技术工作.