HTTP

HTTP协议的一个重要方面就是能够利用请求和响应数据流发送扩展的标题信息。标题信息可以包括cookies、以及发送请求的特定浏览器(用户代理)的一些详细信息。

WebRequest类和WebResponse类提供了读取标题信息的一些支持。而两个派生的类HttpWebRequest类和HttpWebResponse类提供了其他HTTP特定的信息。用HTTP URI创建WebRequest会生成一个HttpWebRequest对象实例。因为HttpWebRequest派生自WebRequest,可以在需要WebRequest的任何地方使用新实例。

还可以把实例的类型强制转换为HttpWebRequest引用,访问HTTP协议特定的属性。同样,在使用HTTP时,GetResponse()方法调用会返回WebResponse引用,也可以进行一个简单的强制转换,以访问HTTP特定的特性。

WebRequest wrq = WebRequest.Create("");
HttpWebRequest hwrq = (HttpWebRequest)wrq;
Console.WriteLine("Request Timeout (ms) = " + wrq.Timeout);
Console.WriteLine("Request Keep Alive = " + hwrq.KeepAlive);
Console.WriteLine("Request AllowAutoRedirect = " + hwrq.AllowAutoRedirect);

Timeout属性的单位是毫秒,其默认值是100 000。可以设置这个属性,以控制WebRequest对象在产生WebException之前要在响应中等待多长时间。可以检查属性WebException.Status,看看产生异常的原因。这个枚举类型包括超时的状态码、连接失败、协议错误等。

KeepAlive属性是对HTTP协议的特定扩展,所以可以通过HttpWebRequest引用访问这个属性。该属性允许多个请求使用同一个连接,在后续的请求中节省关闭和重新打开连接的时间。其默认值为true。

AllowAutoRedirect属性也是专用于HttpWebRequest类的,使用这个属性可以控制Web请求是否应自动跟随Web服务器上的重定向响应。其默认值也是true。如果只允许有限的重定向,可以把HttpWebRequest的MaximumAutomaticRedirections属性设置为想要的数值。

HTTP标题信息

请求和响应类把大多数重要的标题显示为属性,也可以使用Headers属性本身显示标题的总集合。在GetResponse()方法调用的后面添加如下代码

WebRequest wrq = WebRequest.Create("");
WebResponse wrs = wrq.GetResponse();
WebHeaderCollection whc = wrs.Headers;
for(int i = 0; i < whc.Count; i++)
{
    Console.WriteLine("Header " + whc.GetKey(i) + " : " + whc[i]);
}

results matching ""

    No results matching ""