在http Web响应中解析相关请求

时间:2009-12-30 17:27:56

标签: c# parsing httpwebrequest httpwebresponse webtest

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

例如,如果我发出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并查看是否有对其他资源的请求(例如js / css文件,图像等)

是否有一种简单的方法可以执行此操作?我对手动执行此操作犹豫不决,因为某些资源请求可能是以编程方式设置的,并且在简单的文本解析中可能并不明显。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我有理由相信WebTestRequest本身只会执行“简单的文本解析”来确定依赖请求,因为它不知道javascript。因此,如果您要实现这样的话,那么您的代码将准确地模拟行为。

以下是我在粗略看一眼HMTL 4规范中可以找到的所有元素的列表,这些元素可以引用其他资源,因此需要进行解析:

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

不确定它是否详尽无遗。

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

修改

  

某些资源请求可能以编程方式设置,并且在简单的文本解析中可能不明显

事实上,在某些时候确定解析html响应的相关请求是不可能的,我将举例说明:使用Google Web Toolkit开发的任何内容。在我测试的最近的GWT应用程序中,基本上没有没有可解析的html - 一切都是从javascript运行的。提取明显的路径名称(如果可用)甚至没有用,因为实际上条件逻辑选择了某些家属而不是其他家属。