问题

如何发送一个HTTP GET请求并且完全控制这个请求的各项属性。

设计

创建一个HttpWebRequest类的实例,并通过GetResponse()方法取回相应的HTTP响应。

方案

string uri = " http://server/path/WebForm.aspx";

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);

req.Method = "GET";

req.MaximumAutomaticRedirections = 3;

req.Timeout = 5000;

Console.WriteLine("Sending HTTP request");

HttpWebResponse res = (HttpWebResponse)req.GetResponse();

Stream resst = res.GetResponseStream();

StreamReader sr = new StreamReader(resst);

Console.WriteLine("HTTP Response is: ");

Console.WriteLine(sr.ReadToEnd());

sr.Close();

resst.Close();

注解

对于轻 量级的自动化测试程序来说,HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择。它们支持一系列有 用的属性。这两个类位于System.Net命名空间,默认情况下这个类对于控制台程序来说是可访问的。请注意,HttpWebRequest对象不是利 用new关键字通过构造函数来创建的,而是利用工厂机制(factory mechanism)通过Create()方法来创建的。另外,你可能预计需要显式地调用一个“Send”方法,实际上不需要。接下来调用 HttpWebRequest.GetResponse()方法返回的是一个HttpWebResponse对象。你可以把HTTP响应的数据流 (stream)绑定到一个StreamReader对象,然后就可以通过ReadToEnd()方法把整个HTTP响应作为一个字符串取回。也可以通过 StreamReader.ReadLine()方法逐行取回HTTP响应的内容。

这种技术展示了如何限制请求重定向(request redirections)的次数, 并且设置了一个超时限制。下面是HttpWebRequest的一些属性,这些属性对于轻量级的自动化测试程序是非常重要的。

l  AllowAutoRedirect:获取或设置一个值,该值指示请求是否应跟随重定向响应。

l  CookieContainer:获取或设置与此请求关联的cookie。

l  Credentials:获取或设置请求的身份验证信息。 

l  KeepAlive:获取或设置一个值,该值指示是否与 Internet 资源建立持久性连接。

l  MaximumAutomaticRedirections:获取或设置请求将跟随的重定向的最大数目。

l  Proxy:获取或设置请求的代理信息。

l  SendChunked:获取或设置一个值,该值指示是否将数据分段发送到 Internet 资源。

l  Timeout:获取或设置请求的超时值。

l  UserAgent:获取或设置 User-agent HTTP 标头的值。

每个属性的用途从它们的名称上来看都是显而易见的,并且有详细的文档来对它们进行描述,在需要用到它们的时候,可以查阅相关的文档。