2009-12-30 97 views
1

我想模拟WebTestRequest类的行为(在Visual Studio的测试工具框架中),它可以根据从响应中引用的资源调用相关请求原始请求。解析HTTP Web响应中的相关请求

例如,如果我发出了一个网络请求并获得通过这样的回应:

string url = "http://www.mysite.com"; 
WebRequest request = WebRequest.Create(url); 
using (WebResponse response = request.GetResponse()) 
{ 
    StreamReader reader = new StreamReader(response.GetResponseStream()); 
    string responseText = reader.ReadToEnd(); 
} 

我希望能够解析responseText,看看是否有其他资源的任何请求(如爵士/ css文件,图像等)

有没有简单的方法做到这一点?我不愿手动执行此操作,因为某些资源请求可能以编程方式设置,并且在直接的文本分析中可能不明显。

回答

0

使用html/sgml解析器库。我对Visual Studio不熟悉,但是有解析HTML的框架。找到一个并在API中查找与查找元素相关的内容。

+0

为了清楚起见,我已经使用IHTMLDocument3接口为html元素提取构建了一个文档对象。根据回答,我更感兴趣的是弄清楚我应该执行哪些相关请求。你知道一个能解决这个问题的html解析器吗? – 2009-12-30 18:03:34

+0

听起来就像你想要一个完整的web引擎。 Webkit就是这样的事情。如果你真的需要那个,我不确定你是否这样做,那么你可以研究一下。对不起,我不能再有任何帮助。 – dlamotte 2009-12-30 18:37:36

0

我相当确定WebTestRequest本身只做一个“简单的文本解析”来确定依赖请求,因为它没有javascript意识。所以,如果你要实现这些,那么你的代码将准确地模拟行为。

以下是我能找到的,可以参考其他资源的HMTL 4规范的粗略地看一眼的元素列表,因此将需要解析:

  • <link href=
  • <img src=
  • <script src=
  • <iframe src=
  • <object data=
  • <area href=

不确定它是否详尽无遗。

顺便说一句,我很好奇你最终做了什么。

编辑:

一些资源请求的可通过编程设置,可能不会很明显在一个简单的文本解析

它实际上不可能在某一时刻确定解析html响应的相关请求,我会举一个例子:用Google Web Toolkit开发的任何东西。在我测试的最近GWT应用程序中,基本上有可解析的html - 所有内容都是从javascript运行的。提取明显的路径名(当可用时)甚至没有用,因为实际上条件逻辑选择了某些依赖项而不是其他项。