那位哥哥能告诉我以下代码什么地方有错误?帮忙看看吧,没几行。
我用以下代码下载一个GB2312的网页,可是经常下载到一半左右或者是快要完成的时候就自动的结束了。表面上看是下载结束了,而且没有异常发生,就像是http流结束了。可是看文件就知道,不完整。
为什么呢?
我用的测试网页是http://news.sina.com.cn/old1000/news1000_20050204.shtml,这个网页大约有2M左右。
public static int BUFFER_SIZE = 32768;
public static string GetURLContentString(string url)
{
//StringBuilder buffer = new StringBuilder();
byte[] buffer = null;
try
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.KeepAlive = false;
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
Stream streamResponse=httpWebResponse.GetResponseStream();
BinaryReader binaryReader = new BinaryReader(streamResponse);
buffer = null;
byte[] blockBuffer = binaryReader.ReadBytes(BUFFER_SIZE);
while (blockBuffer.Length > 0)
{
if(buffer == null)
{
buffer = new byte[blockBuffer.Length];
blockBuffer.CopyTo(buffer,0);
}
else
{
byte[] bufferTmp = new byte[blockBuffer.Length + buffer.Length];
buffer.CopyTo(bufferTmp,0);
Array.Copy(blockBuffer,0,bufferTmp,buffer.Length - 1, blockBuffer.Length);
buffer = bufferTmp;
}
if(blockBuffer.Length < BUFFER_SIZE)
break;
blockBuffer = binaryReader.ReadBytes(BUFFER_SIZE);
}
binaryReader.Close();
streamResponse.Close();
httpWebResponse.Close();
return Encoding.GetEncoding("GB2312").GetString(buffer, 0, buffer.Length);
}
catch(ArgumentException e)
{
Console.WriteLine("\nThe second HttpWebRequest object has raised an Argument Exception as 'Connection' Property is set to 'Close'");
Console.WriteLine("\n{0}",e.Message);
}
catch(WebException e)
{
Console.WriteLine("WebException raised!");
Console.WriteLine("\n{0}",e.Message);
Console.WriteLine("\n{0}",e.Status);
}
catch(Exception e)
{
Console.WriteLine("Exception raised!");
Console.WriteLine("Source :{0} " , e.Source);
Console.WriteLine("Message :{0} " , e.Message);
}
return buffer.ToString();
}