Makale Özeti

Bu yazımızın konusu, C# ile internetten download ve upload işlemleri nasıl yapılır, IE Web browser componenti nasıl kullanılır onu inceleyecegiz.

Makale

Merhabalar, günümüzde  tek vazgeçemeyeceğimiz şey herhalde internete erişmektir. Şu anda C# ile her türlü dinamik ASP.NET sayfaları veya ustaca kurgulanmış XML web servisleri geliştirebiliyoruz. Peki bunları gezinmek için ne kullanıyoruz?. IE, FireFox veya diğerleri, aslında temelde olan şey o sayfayı download etmek ve HTML için render etmek. Bu makalemizde ilk olarak nasıl download ve upload edilir, daha sonrada basit bir IE clonu nasıl yapılır ona bakacağız.

 

Herhangi bir web browser ile internet üzerindeki ASP.NET veya diğer sayfalara  erişebiliyoruz,bu durumda kendi yazdığımız uygulama ile de rahatlıkla gezinebiliriz. Gezinmenin dışında kendi yazdığımız bir uygulama ile dosya indirmemizde mümkün.

 

Dosya indirmek için namespaceslerimizin arasına  System.Net ve System.IO eklemeyi unutmayalım. Bunun sayesinde http, https ve file ile başlayan web tekniklerine erişebileceğiz.

Aşağıdaki örnekte bir web sitesindeki istediğimiz sayfayı nasıl download ederiz onu göreceğiz.

Formumuzu ilk olarak dizayn ediyoruz, ben iki textbox kullandım, birisi istediğimiz adresi girmek için diğeride içeriğini görüntülemek için.

 

Butonunda ne iş yaptığını yazmama gerek yok sanırım  İşte butonumuzun click eventi:

private void btn_getir_Click(object sender, System.EventArgs e)

{

//istenilen siteyi acamamasi durumunda olusan hatayi gostermek icin

try

{

//iste meshur WebClient objemiz

WebClient istemci = new WebClient();

//istenilen adresdeki dosyayi okuna bilir hale getirebiliyoruz

Stream strm = istemci.OpenRead(txt_adres.Text);

//hafizadan okumak icin StreamReader kullaniyoruz

StreamReader sr = new StreamReader(strm);

string satir;

//stream in icindeki her satiri okuyoruz

while ( (satir=sr.ReadLine()) != null )

{

txt_icerik.Text.Text=satir+”\r\n”);

}

strm.Close();

}

catch(Exception ex)

      {

      MessageBox.Show("Bir hata meydana geldi, Hata asagidaki gibidir:\n"+ex.Message,"hata");

      }

}

 

 Hiç açıklamaya gerek duymuyorum, oldukça basit ve sade bir kod. Bu şekilde istediğimiz sayfayı stream şeklinde indirebiliriz.

 

İşte örnek bir sayfa görüntüleme: ben örnek olarak http://www.hotmail.com/default.aspx denedim. Siz istediğinizi deneyiniz. Programımız sayfayı download edemediği zaman, gerekçesini söylemekte.

Eger download edeceğiniz şey bir text içeriğe sahip değil ve siz onun içeriğini görüntülemeden, direkt kendi diskinize indirmek istiyorsanız o zaman, download icin farklı methodlar denemeniz lazım.

 

StreamReader’den aldıklarımızı bir byte arrayine aktarıp onu direkt diske dosya olarak kaydedebiliriz. Yada

 

istemci.DownloadFile(“http://www.ownxp.com/deneme.rar”,”deneme.rar”);
 
//nereye indigini gormek icinse
 
string dosya_yeri = Application.StartupPath;
 

DownloadFile methodunu kullanabiliriz.

 

Herhangi bir siteden download edebildiğimiz gibi, istediğimiz dosyayı upload da edebiliriz. Upload işleminde  tek sorun server daki upload yapacağınız klasörde gerekli izinleriniz olması durumu. WebClient sınıfı ile download işlemleri gibi upload işlemleride oldukça basite indirgenmiş. Yani siteye belirli bir kullanıcı adı ile bağlanmanız mümkün degil. O tür işlemler için daha gelişmiş bir sınıf  olan WebRequest ve WebResponse sınıflarını kullanmamız lazım

 

Ben bu örnek icin aşağıdaki gibi bir form yaptım:

 

İlk olarak yollayacağımız dosyanın tam path ini veriyoruz mesela “c:\deneme.txt” aşağıda serverdeki tam yerini ve adını yazıyoruz: “www.ownxp.com/celiker/album/deneme.txt” gibi.

 

Yolla butonun click eventi aşağıdaki gibidir:

 

private void btn_yolla_Click(object sender, System.EventArgs e)

{

//hata durumunda apisip kalmayalim

try

{

WebClient yollayici = new WebClient();

//upload ediyoruz

byte[] responseArray=yollayici.UploadFile(txt_server.Text,@txt_dosya.Text);

//eger giderse, yazma hakkimiz var demektir

MessageBox.Show("Basardik.\n"+responseArray.ToString(),"OK");

}

catch(WebException ex)

{

//maalesef bi sorunumuz var

MessageBox.Show("Bir hata oldu sanki;\n"+ex.Message,"Hata");

}

}

 

Aslında sizinde tahmin edebileceğiniz gibi bu türlü bir upload olayı hiç güvenli olmadığı için pek tercih edilen bir yöntem değil. Yalnızca dosya yollamak da zorunda değiliz, farklı veri türleri upload edebiliriz;

 

byte[] resim;

// bir bmp veya jpg dosyasina ait binary bilgileride yollayabiliriz

yollayici.UploadData(“http://www.ownxp.com/celiker/yeni.jpg”, resim);

 

Bunun dışında serverde bulunan bir dosyaya tıpkı aşağıdaki gibi streamler ekleyebiliriz, ;

 

Stream stream = yollayici.OpenWrite(“http://192.168.1.10/Upload/yeni.txt”, “PUT”);

StreamWriter streamWriter = new StreamWriter(stream);

streamWriter.WriteLine(“Selamlarr”);

streamWriter.Close();

 

Buraya kadar herşey iyi hoştu ama biz hala bir web sitesi görüntüleyemedik. Yani download ettiğimiz dosyanın, HTML renderini yapmadık. Aslında download yapmak kadar bu da basit. Burada ihtiyacımız olan olan bir webbrowser.

 

Visual Studio bize Internet Explorer tipinde bir ara birim kontrolünü ActiveX componentini eklemek suretiyle vermekte. Ama 2005 de sanırım WebControl cok daha kolay olacak linki incelerseniz göreceksiniz (http://lab.msdn.microsoft.com/express/vcsharp/develop/createwindowsapp/default.aspx )

 

O yuzden şimdilik biz bu işi ya Iexplorere teslim etcez;

 

Process yenip = new Process();

yenip.StartInfo.FileName = “iexplore.exe”;

yenip.StartInfo.Arguments = “http://www.ownxp.com”;

yenip.Start();

 

Yada, kendi uygulamamızın icine gömeceğiz; ama ilk önce gerekli kontrolü ekleyelim toolboxdan ekle diyerek gösteriyoruz.

Ekledikten sonra, toolboxdan controlu tutup formumuza bırakıyoruz. Birde textbox koyuyorz AddressBar olarak. Ve birde GO butonu.

 

private void btn_git_Click(object sender, System.EventArgs e)

{

      axWebBrowser1.Navigate(txt_adresbar.Text);

}

 

İşte bu kadar, yeni IE clonu web browserınız hayırlı olsun

Hepinize iyi çalışmalar. Umarım faydası dokunmuştur.

 

 

Çeliker BAHÇECİ

celiker@gmail.com

Örnek Kodlar