C# 如何防止在使用Webclient的DownloadString时出现大文件
我正在使用C# 如何防止在使用Webclient的DownloadString时出现大文件,c#,webclient,C#,Webclient,我正在使用Webclient和DownloadString删除大量URL。 目的是获取每个url的页面源 但是,一些URL重定向到下载大文件,并且Webclient抛出错误: 内存不足 所以,我不想下载大文件。如何设置Webclient的最大下载大小?您可以使用Webclient实现这一点,但它提取了太多的细节,因此可能更方便直接使用WebRequest类进行控制,顺便说一句,Webclient本身也使用这些类 使用下划线,然后在达到字符限制后停止阅读ResponseStream 您的方法如下所
Webclient
和DownloadString
删除大量URL。
目的是获取每个url的页面源
但是,一些URL重定向到下载大文件,并且Webclient
抛出错误:
内存不足
所以,我不想下载大文件。如何设置
Webclient
的最大下载大小?您可以使用Webclient实现这一点,但它提取了太多的细节,因此可能更方便直接使用WebRequest类进行控制,顺便说一句,Webclient本身也使用这些类
使用下划线,然后在达到字符限制后停止阅读ResponseStream
您的方法如下所示:
public static string DownloadAsString(string url)
{
string pageSource = String.Empty;
var req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
req.UserAgent = "MyCrawler/1.0";
req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
var resp = (HttpWebResponse)req.GetResponse();
// is this even html and not an image, or video
if (resp.ContentType.Contains("text/html"))
{
var sb = new StringBuilder();
var buffer = new char[8192];
// get the stream
using (var stream = resp.GetResponseStream())
using (var sr = new StreamReader(stream, Encoding.UTF8))
{
// start copying in blocks of 8K
var read = sr.ReadBlock(buffer, 0, buffer.Length);
while (read > 0)
{
sb.Append(buffer);
// max allowed chars per source
if (sb.Length > 50000)
{
sb.Append(" ... source truncated due to size");
// stop early
break;
}
read = sr.ReadBlock(buffer, 0, buffer.Length);
}
pageSource = sb.ToString();
}
}
return pageSource;
}
你可以这样使用这个方法:
var src = DownloadAsString("http://stackoverflow.com");
Console.WriteLine(src);
这将输出组成堆栈溢出首页的html。请注意,此输出的上限为50000个字符,因此它将显示。。。源代码由于
src
字符串末尾的大小而被截断。这个问题似乎让人混淆了您是要下载大文件还是要设置下载大小,如果文件大小超过,您就不想下载。而我想出了