C#nedir?com
 
YAZAR HAKKINDA
Erhan Koçak
Erhan Koçak
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
3 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: ftpwebrequest ftpwebresponse ilgili metodu nesnemizi nesnemizin protokole sinifi sinifinin siniflari stream wclient webclient webrequest webresponse C# / VC#/.NET Erhan Koçak
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 13.3.2006
Okunma Sayısı : 51008
Yorum Sayısı : 4     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Burak Selim Şenyurt
Sekiz Saatlik Sonsuz Döngü 19.1.2020
Burak Selim Şenyurt
Switch Case Kullanmadan Kod Yazılabilir mi? 19.1.2020
Turhal Temizer 'in Blogu
Conda install environment.yml Package 19.1.2020
Turhal Temizer 'in Blogu
Mac OS/X Removing CUDA 19.1.2020
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
WebClient ile HTTP ve FTP Üzerinden Veri Transferi
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bu makalemde WebClient sınıfı ile HTTP ve FTP protokolü üzerinden veri transferi işlemlerinin nasıl yapıldığından bahsedeceğim. Belirli bir URI (uniform resource identifier)’ ye bir istekte bulunmak için kullanılan en temel .NET sınıfı System.Net isim alanında bulunan WebClient sınıfıdır

WebClient sınıfının temel metotlarını incelersek;

WebClient wClient = new WebClient();
wClient.DownloadFile("http://www.google.com", "C:\\google.html");
Eğer sadece URI ‘yi diske kaydettmek istiyorsak, Yukarıdaki gibi DownloadFile metodunu kullanabiliriz. Uygulamamızda web sayfamızdan gelen datayı işlemek istiyorsak OpenRead metodundan faydalanabiliriz. Aşağıdaki örnek bir web sayfasının kaynak kodunun okunması ile ilgilidir.

WebClient wClient = new WebClient();
Stream st = wClient.OpenRead("http://www.google.com");
StreamReader sr = new StreamReader(st);
string line;
while ( (line = sr.ReadLine()) != null)
{
      listBox1.Items.Add(line);
}
WebClient sınıfının OpenWrite isimli metodu ise, bize URI ‘ ye data gönderebilmemiz için yazılabilir stream döner.

WebClient wClient = new WebClient();
Stream st = wClient.OpenWrite("http://localhost/SimpleWebSite/Default.aspx","POST");
StreamWriter sw = new StreamWriter(st);
sw.Write("csharp");
sw.Close();
Bu kodu çalıştırdığımızda aşağıda Page_Load metodu görünen web sayfamıza post işlemi gerçekleşmiş olur.


protected void Page_Load(object sender, EventArgs e)
{
      StreamReader sr = new StreamReader(Request.InputStream);
      string gelen = sr.ReadToEnd();
      Response.Write(gelen.ToUpper());
      Response.End();
}
aspx sayfamıza hem post edip hem de dönen sonucu işlemek için WebClient sınıfının UploadData metodundan faydalanabiliriz. UploadData metodu post edilecek datayı byte dizisi olarak alıp, sonucu yine bize byte dizisi olarak dönmektedir. Aşağıdaki örnek kullanım gösterilmiştir.


WebClient wClient = new WebClient();
byte[] postData = Encoding.ASCII.GetBytes("csharp");
byte[] response = wClient.UploadData("http://localhost/SimpleWebSite/Default.aspx", "POST", postData);
MessageBox.Show(Encoding.ASCII.GetString(response));
Son olarak UploadFile metodu belirtilen yere, lokal dosyamızı upload eder. Authentication için gerekli bilgileri Credentials property ‘sine set edebiliriz.


WebClient wClient = new WebClient();
NetworkCredential myCred = new NetworkCredential("myUID", "myPWD");
wClient.Credentials = myCred;
wClient.UploadFile("http://localhost/SimpleWebSite/a.txt", "C:\\a.txt");
WebRequest ve WebResponse Sınıfları

WebClient sınıfı herhangi bir protokolü kullanarak, veri gönderip almak (request-response) için tasarlanmış genel bir sınıftır. Belirli bir protokole ait spesifik bir özelliği yönetemez (http için cookie’ler gibi). Bu tip durumlar için yine System.Net isim alanında bulunan WebRequest ve WebResponse sınıflarını kullanmamız gerekecektir.

İlk olarak, yukarda WebClient sınıfı ile de gerçekleştirdiğimiz birkaç durumu WebRequest ve WebResponse sınıfları ile de gerçekleştirelim. Aşağıdaki örnek bir URI ‘nin içeriğini yazdırmakla ilgilidir.


WebRequest wreq = WebRequest.Create("http://google.com");
WebResponse wres = wreq.GetResponse();
Stream st = wres.GetResponseStream();
StreamReader sr = new StreamReader(st);
string line;
while ((line = sr.ReadLine()) != null)
{
      listBox1.Items.Add(line);
}
wreq.GetResponse().Close();
WebRequest nesnesi farklı network protokollerini destekleyen abstract bir sınıf olup, statik Create metodu ile kendisine verilen URI‘nin başlangıcına göre (http, ftp, file) ilgili protokole göre initialize edillir. HttpWebRequest,FileWebRequest ve FtpWebRequest sınıfları ise WebRequest’ den türemiş, ilgili protokole göre özelleşmiş sınıflardır. Yukarda Create metodu, kendisine verilen parametre doğrultusunda, aslında arka planda HttpWebRequest sınıfı oluşturmuş, istek–cevap işlemlerini bu protokole uygun gerçekleştirmiştir. Oluşan WebRequest nesnemizle, ilgili protokole spesifik işlemler yapmak istediğimiz de, cast işlemiyle bunu gerçekleştirebiliriz.

WebResponse sınıfının yapısı da WebRequest sınıf yapısı ile aynıdır. HttpWebResponse, FileWebResponse ve FtpWebResponse sınıfları WebResponse sınıfından türemiş özelleşmiş sınıflardır. Yukarda oluşan WebResponse sınıfı da aslında arka planda HttpWebResponse sınıfıdır.

Bu yapıya ‘pluggable protocols’ denmektedir.

Yukarıdaki kodumuzun ilk satırında Create statik metoduyla WebRequest nesnemizi yaratıp, daha sonra WebRequest nesnemizin GetResponse metodu ile WebResponse nesnemizi oluşturuyoruz. Oluşan WebResponse nesnemizin GetResponseStream metodu ise bize, bulunduğumuz isteğin cevabını okuyabileceğimiz stream nesnesi dönmektedir. Daha sonra bu stream sınıfından faydalanarak gerekli okuma işlemini yapmaktayız.

Şimdi de, daha önce oluşturduğumuz web sayfasına veri post edip dönen cevabı WebResponse sınıfı ile almayı görelim.

WebRequest wreq = WebRequest.Create("http://localhost/SimpleWebSite/Default.aspx");
wreq.Proxy = WebProxy.GetDefaultProxy();
wreq.Method = "POST";
wreq.ContentType = "text/xml"; StreamWriter writer = new StreamWriter(wreq.GetRequestStream());
writer.WriteLine("csharp");
writer.Close();

WebResponse wres = wreq.GetResponse();
StreamReader reader = new StreamReader(wres.GetResponseStream());
string cevap = reader.ReadToEnd();

wreq.GetRequestStream().Close();
wres.GetResponseStream().Close();

MessageBox.Show(cevap);


Create metodu ile WebRequest nesnemizi yarattıktan ve gerekli parametreleri bu nesnemize atadıktan sonra WebRequest nesnemizin GetRequestStream metodu ile yazılabilir stream‘imizi elde ediyoruz. Post işlemini bu stream’e yazarak gerçekleştirdikten sonra, dönen cevabı Yukarıdaki örnekte olduğu gibi yine WebResponse nesnemizin GetResponseStream metodundan dönen stream ile elde ediyoruz.

HTTP Başlık Bilgileri

HTTP protokolünün önemli bir özelliği, istek ve cevap bildirimlerinde başlık bilgisi gönderebilmesidir. Bu bilgi cookie’lerle, yada tarayıcının istek gönderim detayları ile ilgili olabilir. WebRequest ve WebResponse sınıfları da başlık bilgisi okuma konusunda destek vermektedir ama HttpWebRequest ve HttpWebResponse sınıfları HTTP protokolüne spesifik ekstra bilgiler de sağlar.


WebRequest wreq = WebRequest.Create("http://localhost/SimpleWebSite/Default.aspx");
HttpWebRequest httpReq = (HttpWebRequest)wreq;

listBox1.Items.Add("Request Time (ms)="+wreq.Timeout);
listBox1.Items.Add("Request KeepAlive="+httpReq.KeepAlive);
listBox1.Items.Add("RequestAllowAutoRedirect="+httpReq.AllowAutoRedirect);

Yukarıdaki kodu incelersek, http URI‘si ile yaratılmış WebRequest nesnemizi HttpWebRequest nesnesine cast edip HTTP prokolüne spesifik özellikleri yazdırıyoruz. Timeout property’si WebRequest tarafından da desteklenen, istekte bulunduğumuz web sayfasından cevap gelmesi için beklenen süreyi milisaniye cinsinden temsil eder. Bu süre sonunda cevap alınmazsa WebException oluşur. Varsayılan 100.000 ms ‘dir.
KeepAlive property’si aynı bağlantı üzerinden birden fazla istekte bulunabilmemizi sağlar. Arka arkaya gelecek istekler için bağlantı açıp kapamada zaman kazandırır. Varsayılan değeri True’dur.
AllowAutoRedirect property’si ise yapılan isteğin, web sunucusu tarafından gerçekleştirilen yönlendirmeleri takip etmesini sağlar. Varsayılan değeri True’dur.

HTTPWebRequest programcıya, bu property’ler gibi HTTP protokolüne özel seçenekler sunmaktadır.

FtpWebRequest ve FtpWebResponse Sınıfları

Framework 2.0 ile birlikte, daha önce Low-Level düzeyde, socket işlemleri ile hallettiğimiz standart Ftp işlemlerini artık FtpWebRequest ve FtpWebResponse sınıflarını kullanarak kolay bir şekilde halledebiliriz. Kullanım şekli ise diğer network protokollerinde olduğu gibidir.

Aşağıdaki örnek, kullanıcı adı ve şifre gerektiren bir ftp adresindeki bir dosyanın içeriğini elde etmeyi gerçekleştirir.


WebRequest wreq = WebRequest.Create("ftp://10.222.2.88/erhan/down.txt");
FtpWebRequest ftpReq = (FtpWebRequest)wreq;
ftpReq.Credentials = new NetworkCredential("administrator", "433542");
ftpReq.Method = WebRequestMethods.Ftp.DownloadFile;

FtpWebResponse ftpRes = (FtpWebResponse)ftpReq.GetResponse();
StreamReader sr = new StreamReader(ftpRes.GetResponseStream());
string content = sr.ReadToEnd();
ftpRes.GetResponseStream().Close();

MessageBox.Show(content);


Yukarıdaki kodda, FtpWebRequest nesnemizi oluşturup kullanıcı ve şifre bilgilerini Credentials property’ sine atadıktan sonra, Method property’sine WebRequestMethods.Ftp.DownloadFile değerini atayarak dowload isteğinde bulunacağımızı belirtiyoruz. Daha sonra FtpWebRequest nesnemizden GetResponse metodu ile FtpWebResponse nesnemizi yaratıp GetResponseStream metodu ile ilgili stream’ e ulaşmış oluyoruz.

Aşağıdaki örnektede aynı Ftp adresine dosya upload işlemini gerçekleştirmektedir.


WebRequest wreq = WebRequest.Create("ftp://10.222.2.88/erhan/up.txt");
FtpWebRequest ftpReq = (FtpWebRequest)wreq;
ftpReq.Credentials = new NetworkCredential("administrator", "454t6432");
ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
StreamWriter sw = new StreamWriter(ftpReq.GetRequestStream());
sw.Write("uploaded text");
sw.Close();


Yukarıdaki kodda, ilgili FtpWebRequest sınıfı yaratılıp, Method property’sine bu sefer WebRequestMethods.Ftp.UploadFile değerini atayarak upload işlemi yapacağımızı belirtiyoruz. Daha sonra FtpWebRequest nesnemizin GetRequestStream metodu ile bize dönen yazılabilir stream’e dosya içeriğini giriyoruz.

WebRequestMethods.Ftp sınıfı içerisinde dowload ve upload dışında ftp adresinde gerçekleştirebileceğimiz diğer işlemler içinde değerler bulunmaktadır. Yapacağımız işleme göre ilgili değeri Method property’sine atayıp , request ve response sınıflarını kullanarak istediğimiz işlemi gerçekleştirebiliriz.

Bugünkü makalemde, sizlere WebClient ve WebRequest–WebResponse sınıflarını kullanarak temel internet işlemlerinin yapımı hakkında bilgiler vermeye çalıştım. Bir sonraki makalemde görüşmek üzere hepinize iyi çalışmalar dilerim.

Makale:
WebClient ile HTTP ve FTP Üzerinden Veri Transferi C#, Visual C# ve .NET Erhan Koçak
  • Yazılan Yorumlar
  • Yorum Yaz
OCA
29
2013
Merhabalar, Bu konuda biraz derinlemesine araştırma yapıyorum, hız testi yapacak web form uygulaması yapmak istiyorum fakat kafamda bazı soru işaretleri var. Örneğin speed test için en ideal download yöntemi hangisi acaba? webclient var HttpWebRequest var stream var sizce bu iş için hangisi kullanılmaldır
MAY
20
2010
abi kusurabakma rahatsız ediyom ya bu proramın çalışmış şekli varmı... yardımcı olsanız bu benim projemde.
ŞUB
19
2010
bu projeyi programıma indiremiyorum acil bana yardım edermisiniz
MAR
15
2006
teşekkürler Erhan Bey,gayet anlaşılır bir yazı olmuş..İyi çalışmalar..
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor