【发布时间】:2009-04-29 18:01:16
【问题描述】:
我正在做一些自动化工作,可以绕过网站并发布到 HTML 表单,但现在我面临新的挑战,Ajax 表单。
由于没有可阅读的源代码,我想知道是否可以在 C# 中以编程方式填写 Ajax 表单。我目前正在使用不可见的 axWebBrowser。
提前感谢您的帮助!
【问题讨论】:
标签: c# post ajax-forms
我正在做一些自动化工作,可以绕过网站并发布到 HTML 表单,但现在我面临新的挑战,Ajax 表单。
由于没有可阅读的源代码,我想知道是否可以在 C# 中以编程方式填写 Ajax 表单。我目前正在使用不可见的 axWebBrowser。
提前感谢您的帮助!
【问题讨论】:
标签: c# post ajax-forms
是的,但我建议使用不同的方法来请求/响应服务器页面,包括常规页面和 AJAX 处理程序页面。
在 c# 中,尝试使用 WebRequest/WebResponse 或更专业的 HttpWebRequest/HttpWebResponse 类。
Ajax 只不过是一种允许 Javascript 向服务器发出 HTTP 请求的技术的“花哨”名称,该服务器通常实现一些处理程序,为 Javascript 调用者生成专门的、轻量级的内容(通常编码为 JSON)。
因此,为了模拟 AJAX 调用,您所要做的就是检查您的目标应用程序(您想要“发布”到的网页)并查看用于 AJAX 通信的格式 - 然后复制页面的 Javascript使用 WebREquest/WebResponse 类的 C# 行为。
请参阅Firebug - 一个很棒的工具,可让您检查网页以确定它发出的调用、哪些页面以及这些页面响应的内容。它在检查 AJAX 调用方面也做得很好。
这里有一个非常简单的例子来说明如何进行网络请求:
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 也是一个请求,但方法不同。请参阅this page 了解如何做一个非常简单的帖子的示例。
编辑 - 有关使用 Firebug 检查页面行为的详细信息
我所说的检查您要复制的页面的意思是使用一种工具(我在 Firefox 上使用 Firebug)来确定页面和服务器之间的信息流。
使用 Firebug,您可以使用“网络”和“控制台”面板来完成此操作。 Net 面板列出了加载页面时浏览器执行的所有请求。而“控制台”将列出页面加载后页面与服务器之间发生的通信。在页面加载后发生的那些通信本质上是您想要复制的 AJAX 调用(注意:必须在 Firebug 中启用网络监控才能工作)
查看Michael Sync's tutorial 了解有关 Firebug 的更多信息,并尝试使用控制台面板了解有关 AJAX 请求的更多信息。
关于“使用 WebRequest/WebResponse 从 C# 复制页面的行为” - 您必须意识到,就像我之前所说的,Javascript AJAX 调用只不过是一个 HTTP 请求。这是 Javacript 在“幕后”或带外向 Web 服务器发出的 HTTP 请求。要复制这一点,它实际上与复制一个普通的 GET 或一个普通的 POST 就像我上面展示的一样。这就是 Firebug 发挥作用的地方。使用它,您可以查看请求,因为 Javascript 使请求 - 查看控制台面板,并查看请求消息的样子。
然后您可以使用与上述相同的技术,使用 HttpWebRequest/HttpWebResponse 发出与 Javascript 相同类型的请求,而只能从 C# 中执行。
Gregg,我希望这能澄清我的答案,但除此之外,我建议使用 Firebug 并了解更多关于 HTTP 协议的工作原理以及 AJAX 作为一种技术如何工作的信息。
【讨论】:
您是否考虑过使用 Selenium。 AFAIK,你可以用 C# 编写测试用例,我知道我们的测试人员之前已经成功使用它来测试启用 Ajax 的 ASP.NET 站点的 UI 测试
【讨论】: