: System.Net'teki gibi HttpWebRequest
, HttpWebResponse
, FtpWebRequest
üst düzey API'leri kullanarak
ve diğer sınıflar. , TcpListener
ve Soket sınıfları gibi System.Net.Sockets öğelerindeki düşük düzeyli API'ları kullanma.
birinci yaklaşımı kullanmanın avantajı, tipik böyle, önbelleğe alma vb üst düzey hazırlanması ve HTTP başlıklarını yorumlama ve vekiller, kimlik taşıma gibi düşük seviyeli sıhhi tesisat konusunda endişelenmenize gerek kalmamasıdır Sınıflar bunu sizin için yapar ve bu yüzden bu yaklaşımı tercih ederim. şuna benzer bir url bir dosya indirmek için bir HTTP isteği hazırlamak için ilk yöntem, tipik bir kodu kullanarak
: Yukarıdaki kod sonunda
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();
, bir ağa olsun Daha sonra başka bir akış nesnesini okuyormuş gibi uzak dosyanın baytlarını okumak için kullanabileceğiniz akış nesnesi. Artık, uzak url, herhangi bir aritmetik pozisyondan okumanıza izin vererek kısmi yüklemelere devam etmeyi destekliyorsa, yukarıda gösterildiği gibi "Accept-Ranges" HTTP başlığı tarafından belirlenir. Bu değer "bayt" dışında bir değere ayarlanırsa, bu özellik desteklenmez. Aslında bu kod, C# 'da uygulamaya çalıştığım daha büyük bir açık kaynak indirme yöneticisinin parçasıdır. Bu uygulamaya başvurmak ve bir şey sizin için yararlı olabilir eğer görebilirsiniz: açık kaynak .Net http dosya indirici otomatik özgeçmiş ile vardır http://scavenger.codeplex.com/
Bilmeniz gereken bir şey, bir yükleme işleminin devam edip edilemeyeceği veya sunucu tarafından belirlenip yüklenemeyeceğidir. –
@RanhiruCooray Evet, bunun farkındayım. Sorum, sunucuya izin verdiğinde nasıl devam edeceğinizdir –
Doğru aralığı kendiniz istemeniz gerekecektir. Yeni parlak 'Http.Client' bile bunu otomatik olarak yapmaz: http://blogs.msdn.com/b/webdev/archive/2012/11/23/asp-net-web-api-and-http-byte- range-support.aspx (Özel bir dosya indirme kütüphanesi bulamadıkça). – millimoose