Hepinizin, Ramazan bayramı kutlu olsun. Bayram vesilesi ile C#’ı terk etmemin ardından yazacağım ilk makalemi yazayım bakalım. Ben takıntılı bir insanım. Genelde toplu mesajlarlara (türü ne olursa olsun) cevap yazmam ve göndereni de gönderdiğine pisman ederim. Toplu mesajlardan ne kadar hoslandığımı gösrmek isterseniz, burayı okuyabilirsiniz.
Şimdi bu kadar konuştuktan sonra, kimseye klasik bayram mesajlarından yollayamam çünkü kendimi tekrar etmiş olurum. Herkese tek tek yazmaktansa bunun programını yazayım dedim, işte başlıyoruz…
Program SüperŞifrem’le Turkcell WebMesajCell’e oturum açıp,
!name, bayramının kutlu, mutlu ve güzel geçmesini dilerim. Bayramın mübarek olsun.
Şeklindeki bir mesajı, telefon numarasını ve ismi bir dosyadan okuyup otomatik olarak yollayacak.
Dikkat, WebMesajCell servisi ücretsiz değildir, gün içerisinde ilk mesajdan sonra 15 ücretsiz mesaj hakkınız vardır. 16. mesadan sonrası tarifeniz üzerinden ücretlendirilecektir.
Giriş
İnternetten Bir Sayfayı Yükleme
Herşeyden önce internetten bir dökümanı nasıl çekeceğimize bakalım. Eğer daha önce internet üzerinde programlama yapmışsanız, Response ve Request sistemine aşinasınızdır. Karşıya bilgiyi Request ile gönderirsiniz, Response ile alırsınız.
Öncelikle, yukarıda ki kodda bulunan HttpWebRequest ve HttpWebResponse nesneleri, System.Net isimuzayı altında, StreamReader ise System.IO altındadır. Yukarıda ki kod, basitçe textAdres isimli metin kutusuna girilen adresteki sayfanın kaynagını rtbSonuc isimli zengin metin kutusunda gösteriyor. Uygulamanın çalışır halini ve kaynak kodunu buradan (58,14 kB) indirebilirsiniz.
Karşı Tarafa Form Bilgisi Gönderme
Karşı tarafa form bilgisi bildiğiniz gibi HTTP-GET ya da HTTP-POST olarak gönderilebilir. Bu konu hakkında buradan bilgi alabilirsiniz. En basit anlatımla GET ile bilgi iletimi site adresinin sonuna “?” eklenerek form bilgilerinin iletilmesidir. Göreceli olarak daha basittir, ama iletilebilecek bilgi sınırlıdır. Örneğin, Internet Explorer adres satırı uzunluğunu 4096 karakterle sınırlandırmıştır.
POST metodu ise, bilgileri karşı tarafa ayrı olarak iletilir. Bu yöntemle iletilen mesajlar genel olarak “application/x-www-form-urlencoded” şeklinde kodlanarak karşı tarafa iletilir. Diğer, kodlamalar için burayı inceleyebilirsiniz.
HTTP-GET ile Form Bilgisi Gönderme
HTTP-GET örneği olalarak, Live Search’te arama yapıp sonucları gösteren basit bir program yapalım. Adreş şablonu şu şekilde:
http://search.live.com/results.aspx?q=tisba&lf=1&rf=0
Yukarıda search.live.com’a üç adet form bilgisi iletiliyor. Bunlardan birincisi “q”, arama metnini tutuyor; ikincisi “lf”, Yalnızca {Dil} seçeneğini tutuyor; üçüncüsü ise “rf”, Yalnızca {ülka} kaynağından seçeneğini tutuyor. Yukarıda ki adresi internet gezginine kopyalarsanız, tisba metnini yalnızca Türkçe sayfalarda ararsınız.
Yukarıda ki kod, verilen ifadeyi Live Search’da arar. Bu kodda yeni olan şey ise HttpUtility ve iif. HttpUtiliy, System.Web.dll altında olan System.Web isimuzayı altında tanımlı olan bir Module’dir (static sınıf). Iff ise, C#’ta ki “?” üçlü operatörü ile aynı işi yapıyor. Kullanımı şu şekilde,
IIf( {boolean ifade}, nesne1, nesne2 )
Eğer ifade doğru ise; nesne1 döndürülür, değil ise nesne2.
HttpUtiliy modülü ise, bu tür işlemlerde çok kullanışlı bir sınıf. Bu tür işlemlerde kullanılabilecek olan kodlamalar burada hazır olarak geliyor. Örnek uygulama kodunu buradan (13.6 kB) indirebilirsiniz.
HTTP-POST ile Form Bilgisi Gönderme
POST örneği içinse, c#nedir.com’a oturum açalım. Oturum açma sayfası burada. Kaynak kodu inceleyince, önemli olan 2 adet form öğesi görüyoruz: login ve sifre

Gördüğünüz gibi karşı tarafa form bilgisi POST yöntemi ile göndermekte çok basit. Burada önemli olan bazı şeyler şunlar:
- WebRequest nesnesinin ContentType özelliği belirtilmelidir.
- WebRequest nesnesinin ContentLength özelliği doğru atanmalıdır.
- WebRequest nesnesinin Method özelliği “Post” olarak atanmalıdır.
GetRequestStream fonksiyonu ile geriye System.Net.ConnectStream türünde bir akım dönüyor. Bu akıma ContentLength özelliğinde belirttiğimiz kadar byte yollamazsak işlem tamamlanmıyor ve elinde sonunda zaman aşımı hatası veriyor.
Bu konu ile ilgili söyleyeceğim son şeyler, şunlar:
- Oturum açma işleminden sonra sistem size bir çerez yazcak büyük ihtımalle. Bu çerezler, WebResponse nesnesinin, CookieContainer adlı özelliğinde tutulur. Bu özelliğin değerini System.Net.CookieContainer türünde bir nesnede tutar ve daha sonra yollayacağımız WebRequest’lerin CookieContainer isimli özelliğine atarsak; her defasında oturum açmamız gerekmez.
- WebRequest.GetRequestStream ile açılan akım’a sadece yazma işlemi yapılabilir.
- WebResponse.GetResponseStream ile açılan akımdan ise yalnızca okuma işlemi yapılabilir.
Yazıma yarın devam edeceğim; ama bitirmeden önce en yazdığımız programın kaynak kodunu buradan (11.44 kB) indirebilirsiniz.
2 kişi tarafından 5.0 olarak değerlendirildi
- Currently 5/5 Stars.
- 1
- 2
- 3
- 4
- 5