Pra*_*eri 12
您可以C#
通过以下两种方式之一从头开始实现从Web服务器下载:
在System.Net使用高层次的API,例如HttpWebRequest
,HttpWebResponse
,FtpWebRequest
,和其他类.
在的System.Net.Sockets如使用低级别的API TcpClient
,TcpListener
和Socket类.
使用第一种方法的优点是,您通常不必担心低级别的管道,例如准备和解释HTTP标头以及处理代理,身份验证,缓存等.高级类为您执行此操作,因此我更喜欢这种方法.
使用第一种方法,准备HTTP请求以从URL下载文件的典型代码如下所示:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
if (UseProxy)
{
request.Proxy = new WebProxy(ProxyServer + ":" + ProxyPort.ToString());
if (ProxyUsername.Length > 0)
request.Proxy.Credentials = new NetworkCredential(ProxyUsername, ProxyPassword);
}
//HttpWebRequest hrequest = (HttpWebRequest)request;
//hrequest.AddRange(BytesRead); ::TODO: Work on this
if (BytesRead > 0) request.AddRange(BytesRead);
WebResponse response = request.GetResponse();
//result.MimeType = res.ContentType;
//result.LastModified = response.LastModified;
if (!resuming)//(Size == 0)
{
//resuming = false;
Size = (int)response.ContentLength;
SizeInKB = (int)Size / 1024;
}
acceptRanges = String.Compare(response.Headers["Accept-Ranges"], "bytes", true) == 0;
//create network stream
ns = response.GetResponseStream();
Run Code Online (Sandbox Code Playgroud)
在上面的代码的末尾,您将获得一个网络流对象,然后您可以使用它来读取远程文件的字节,就像您正在读取任何其他流对象一样.现在,远程URL是否支持通过允许您从任何任意位置读取来恢复部分下载由"Accept-Ranges" HTTP头确定,如上所示.如果此值设置为"bytes"以外的任何值,则不支持此功能.
实际上,这段代码是我尝试在C#中实现的更大的开源下载管理器的一部分.您可以参考此应用程序,看看是否有任何对您有所帮助:http://scavenger.codeplex.com/
有自动恢复/重试支持的开源.Net http文件下载器(如果服务器支持它),看起来它正是你需要的,可以尝试使用它:
https://github.com/Avira/.NetFileDownloader.
归档时间: |
|
查看次数: |
19092 次 |
最近记录: |