首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

5.4  逐行返回HTTP响应的内容

问题

如何逐行返回一个HTTP响应的内容,而不是把整个内容作为一个字符串。

设计

通过HttpWebRequest.GetResponse()方法获得HTTP响应的数据流(stream),并且把这个stream传给StreamReader()的构造函数。然后在一个while循环中通过StreamReader.ReadLine()方法进行逐行读取。

方案 

// 通过WebClient 类、WebRequest类、或者HttpWebRequest类发送HTTP请求

Stream st = null;

// 通过WebClient.OpenRead()方法、WebRequest.GetResponseStream()方法

// 或者HttpWebRequest.GetResponse()把Stream st连接到HTTP响应

StreamReader sr = new StreamReader(st);

string line = null;

Console.WriteLine("HTTP response line-by-line: ");

while ((line = sr.ReadLine()) != null)

{

  Console.WriteLine(line);

}

sr.Close();

st.Close();

注解

用于发送HTTP请求的三种基本方法(WebClient、WebRequest、HttpWebRequest)都支持通过某个方法以Stream对象的形式返回与它们相关联的HTTP响应。这个Stream对象可以与一个StreamReader对象相关联,而StreamReader对象可以有好几种方法取回流数据。使用StreamReader.ReadToEnd()方法 ,可以把HTTP响应作为一个大字符串返回。对许多自动化测试场景来说,这样做就可以了,但是有时候你可能想要以每次一行的方式取回HTTP响应。比如说,如果返回的响应内容非常多,你可能不想把它存储在一个大字符串里。或者你想在HTTP响应里查找一个目标字符串,逐行查找有时候会更高效。如果要进行逐行查找,你可以在一个while循环里使用StreamReader.ReadLine() 方法。ReadLine()方法读入它所碰到的所有字符,直到碰到换行符,然后返回。如果没有读到字符,它会返回null。

除了采取每次读入一行的方法来取回HTTP响应,也可以每次读入固定长度的一组字符:

// 把响应数据流连接到Stream st

// 把st连接到StreamReader sr

char[] block = new char[3];

int ct = 0;

while ((ct = sr.Read(block, 0, 3)) != 0)

{

  for (int i = 0; i < ct; i++)

    Console.Write(block[i] + " ");

}

当想要按字符(而不是按行或字符串)来检查HTTP响应时,上面这段代码是很有用的。在这个例子中,首先声明一个大小为3的字符数组用来存储取回的响应。StreamReader.Read()方法读入3个字符(如果数据流里不足3个字符,则读入剩下的全部字符),并且把这些字符存储到

从下标0开始的字符数组里面,然后返回实际读入的字符个数。如果读入字符的个数为0,则意味着数据流已经读完,可以退出while循环了。请注意,如果把字符数组的大小声明为1,则意味着每次读入1个字符。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论