我用HttpWebRequest对象,可以获取网页URL资源的代码,请问我可以只获取网页头几行代码就中断吗?因为全部获取太浪费时间了.
我希望只获取一点点代码就中断,释放对象资源。可是实现吗?
我之前写的函数,总是获取全部的代码,碰到大的网页,就很慢。
看看我这样写对吗?
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://kai521.spaces.live.com/feed.rss");
req.AddRange(500);//只请求500字节。
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "GET";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
Stream s = res.GetResponseStream();
Encoding encode = Encoding.GetEncoding("utf-8");
StreamReader sr = new StreamReader(s, encode);
Response.Write(Server.HtmlEncode(sr.ReadToEnd()));
sr.Close();
res.Close();
------------------------------
结果似乎不对,还是全部读取出来了。慢~
/// <summary>
/// 文件下载
/// </summary>
/// <param name="url">连接</param>
/// <param name="fileName">本地保存文件名</param>
/// <param name="progressBar">进度条</param>
/// <param name="label">返回已经下载的百分比</param>
public void httpDownFile(string url,string fileName,System.Windows.Forms.ProgressBar progressBar,Label label)
{
stopDown=false;
Stream str=null,fs=null;
try
{
//获取下载文件长度
fileLength=getDownLength(url);
downLength=0;
if(fileLength>0)
{
WebClient DownFile=new WebClient();
str =DownFile.OpenRead(url);
//判断并建立文件
if(createFile(fileName))
{
byte[] mbyte = new byte[1024];
int readL=str.Read(mbyte,0,1024);
fs=new FileStream(fileName,FileMode.OpenOrCreate,FileAccess.Write);
//读取流
while(readL!=0)
// while(readL<1024)
{
if(stopDown)
break;
downLength+=readL;//已经下载大小
if (downLength>1024)//--------------------关键是这个,读取到N字节就停止了读取。
{
break;
}
fs.Write(mbyte,0,readL);//写文件
readL=str.Read(mbyte,0,1024);//读流
progressBar.Value=(int)(downLength*100/fileLength);
label.Text=progressBar.Value.ToString()+"%";
System.Windows.Forms.Application.DoEvents();
}
str.Close();
fs.Close();
}
}
}
catch(Exception ex)
{
if(str!=null)
str.Close();
if(fs!=null)
fs.Close();
// MessageBox.Show(ex.Message);
}
}
谢谢winner2050(winner),我看了你的代码,发现是使用了一个模拟参照的方法。
byte[] mbyte = new byte[1024];
int readL = str.Read(mbyte, 0, 1024);
根据readL模拟的进度,判断实际进度
这样模拟的,准确么?
我想知道WebClient的openRead是异步的还是同步的?
--------------------------
如是同步(不开新线程)的,那在读openRead方法完成之前(获取到网页全部的代码),Stream是不能打开的?这样的话,就不能满足我的 【只读取部分代码就中断】 的要求。
因为这个Steam还是读完了所有网页代码,碰到大网页仍然很慢。