关于stream流的值丢失的问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 03:01:53
下面是一个关于抓取页面HTML代码的的方法:
/// <summary>
/// 获取源代码
/// </summary>
/// <param name="BookUri">要获取源代码的地址</param>
/// <returns>返回获取得到的源代码</returns>
public string WebClient_Menu(string BookUri)
{
string Contentstring = "";
Uri UriTag = new Uri(BookUri);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(UriTag);
//声明一个HttpWebRequest请求
request.Timeout = 30000;
//设置连接超时时间
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamReceive, Encoding.Default); //采用默认编码先读出源代码
Contentstring

什么是流?只进。ReadToEnd后不会再自动回头。应该一次读取流。因为网络流是不支持再次回到头部的。程序改为:
string Contentstring = "";
Uri UriTag = new Uri(BookUri);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(UriTag);
//声明一个HttpWebRequest请求
request.Timeout = 30000;
//设置连接超时时间
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive =response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamReceive, Encoding.Default); //采用默认编码先读出源代码
Contentstring = streamReader.ReadToEnd().ToLower(); //初次读取源代码.
byte[] buffer=Encoding.Default.GetBytes(Contentstring);
string enCode = Regex.Match(Contentstring, "charset=.*?\"").ToString();
if (enCode != "")
{//如果指定编码不为空,则用取得的编码翻译数组
enCode = enCode.Replace("charset=", &q