Giriş
Şu satırı dahil edieriz.
Şu satırı dahil edieriz.
System.Net.WebClient
WebClient, HttpWebRequest'e göre kullanması daha kolay bir sınıf. Ancak .Net 4.5 ve sonrasında WebClient yerine HttpClient sınıfını kullanmak çok daha kolay olabilir.
WebClient kendisi altta HttpWebRequest ve HttpWebResponse sınıflarını kullansa da bize bu sınıfları göstermiyor. Dolayısıyla streamlerle uğraşmak gerekmiyor.
Kullanım
Şöyle yaparız.
Kullanım
Şöyle yaparız.
Uri URI = new Uri($"ftp://{server}/{targetFilePath}");
using (WebClient client = new WebClient())
{
client.Credentials = new NetworkCredential(username, password);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(progress);
client.DownloadFileCompleted += new AsyncCompletedEventHandler(complete);
client.DownloadFileAsync(URI, localFilePath);
}
Constructor
DownloadData metodu
DownloadFile metodu
Belirtilen hedefi dosya olarak indirir. Şöyle yaparız.
wc.DownloadFileAsync(new Uri("http://..."),@"c:\folder\10MB.zip");
DownloadFileCompleted Event
Ekranda ilerlemeyi gösterme imkanı sunarlar.
WebClient wc= new WebClient();
wc.DownloadFileCompleted += C_DownloadFileCompleted;
wc.DownloadFileAsync(...);
void C_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("completed");
}
DownloadProgressChanged Event
Ekranda ilerlemeyi gösterme imkanı sunar
Örnek
Şöyle yaparız.
Şöyle yaparız.
DownloadProgressChangedEventArgs nesnesinin ProgressPercentage özelliği de kullanılabilir.
Örnek
Şöyle yaparız.
WebClient wc= new WebClient();
wc.DownloadProgressChanged += DownloadProgressChanged;
wc.DownloadFileAsync(...);
void DownloadProgressChanged(object sender,DownloadProgressChangedEventArgs e)
{
progressBar1.Maximum = (int)e.TotalBytesToReceive / 100;
progressBar1.Value = (int)e.BytesReceived / 100;
}
ÖrnekŞöyle yaparız.
delegate (object sender, DownloadProgressChangedEventArgs e)
{
$"{(e.BytesReceived/1024).ToString()}KB/{(e.TotalBytesToReceive/1024).ToString()} KB";
(int)(e.BytesReceived / (float)e.TotalBytesToReceive * 100);
}
ÖrnekDownloadProgressChangedEventArgs nesnesinin ProgressPercentage özelliği de kullanılabilir.
wc.DownloadProgressChanged += (o, e) =>
{
.....e.ProgressPercentage.ToString();
};
DownloadString metodu
Tüm sayfayı tek bir string olarak indirir. Şöyle yaparız.
var json = wc.DownloadString("http://myurl");
DownloadStringCompleted Event
Şöyle kullanırız.wc.DownloadStringCompleted +=...;
DownloadStringTaskAsync metodu
Şöyle yaparız
Authorization eklemek için şöyle yaparız.
Cookie eklemek için şöyle yaparız.
Task
t = await wc.DownloadStringTaskAsync(url);
Headers Alanı
Accept eklemek için şöyle yaparız.
wc.Headers[HttpRequestHeader.Accept] = "application/json";
Accept eklemek için şöyle yaparız
wc.Headers["Accept"] = "text/xml";
wc.Headers[HttpRequestHeader.Authorization] = "Basic " +
Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword));
ContentType eklemek için şöyle eklenir.wc.Headers[HttpRequestHeader.ContentType] = "application/json";
ContentType eklemek için şöyle yaparız
wc.Headers["Content-Type"] = "text/xml";
Örnek
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
AutomaticDecompression
Şöyle yaparız.
client.UploadFile("ftp://ftp-server/directory/filename.ext", localfullpath);
ÖrnekŞöyle yaparız.
client.UploadFile("http://...","POST",
"filePath");
ÖrnekŞöyle yaparız.
wc.UploadFile("https://uat.xxxxxx.com.au/soap/upload.aspx", "C:\temp\soap.xml");
DiğerAutomaticDecompression
WebClient sıkıştırılarak gönderilen veriyi açamıyor. Şöyle yapmak gerekiyor.
WebClient sunucu tarafından gönderilen cookie'leri saklamıyor. Eğer cookie'leri saklayıp bir sonraki istek içinde kullanmak istersek iki tane protected metodu override etmek gerekiyor.
class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest;
request.AutomaticDecompression = DecompressionMethods.Deflate |
DecompressionMethods.GZip;
return request;
}
}
CookieWebClient sunucu tarafından gönderilen cookie'leri saklamıyor. Eğer cookie'leri saklayıp bir sonraki istek içinde kullanmak istersek iki tane protected metodu override etmek gerekiyor.
Hiç yorum yok:
Yorum Gönder