Arşiv

İnternet kategorisi için arşiv

Dosya boyutu almak için Head isteğinde bulunmak

05 Ekim 2011 Yorum yapılmamış

Uygulamalarımızda internet üzerindeki bir dosyanın boyut bilgisine ihtiyacımız olabilir.

Yapmamız gereken; dosyaya istekte bulunup Length özelliğinden dosya boyutu bilgisini almak.

var DosyaKonum = "http://www.enginpolat.com/wp-content/uploads/2011/07/FPSOrnek.rar";

WebClient wc = new WebClient();
var Dosya = wc.DownloadData(DosyaKonum);

int DosyaBoyut = Dosya.Length;

Bu yöntemin en önemli dezavantajı, dosyanın boyut bilgisini alabilmek için dosyayı gerçekten download etmemiz gerekiyor. Özellikle büyük boyutlu dosyalarda bu yöntem büyük problemlere yol açacaktır.

Aslında yapılan isteğin sonucunun Başlık (Header) bilgisinde dosya boyutu yer alıyor. Eğer Başlık‘tan (Header) boyut bilgisine ulaşabilirsek dosyayı download etmemize gerek kalmaz.

var DosyaKonum = "http://www.enginpolat.com/wp-content/uploads/2011/07/FPSOrnek.rar";

var Request = WebRequest.Create(DosyaKonum);

Request.Method = "HEAD";

var Response = Request.GetResponse();

var DosyaBoyut = Response.Headers[HttpResponseHeader.ContentLength];

Öncelikle WebRequest sınıfının static Create() method’u sayesinde, parametresinde adresi verilmiş dosyaya bir istek oluşturuyoruz.

Request değişkeninin GetResponse() method’undan sonuç bilgisini almadan önce Method özelliğine HEAD değerini atıyoruz.

Böylece istek sonucunda, dosyanın içeriğinin değil sadece başlık bilgisinin bulunmasını sağlıyoruz.

HttpResponseHeader enum’ında yeralan ContentLength değeri ile Response değişkeninin Headers özelliğinden dosyanın boyut bilgisine ulaşabiliyoruz.

C# ile Hotmail üzerinden e-posta gönderme

02 Ekim 2011 1 yorum

Daha önce C# ile GMail üzerinden e-posta gönderme yazısında yazdığımız e-posta gönderme uygulamasını bu sefer Hotmail üzerinden e-posta gönderecek şekilde yazacağız.

Windows uygulamalarınız üzerinden e-posta gönderebilmek güzel bir özellik.

Uygulama içerisinden e-posta gönderme konusunda ilk akla gelen sorulardan bir tanesi, “Hotmail üzerinden e-posta gönderebilir miyim?” oluyor.

Bu yazımda, Hotmail üzerinden e-posta gönderebileceğimiz bir uygulama geliştireceğim.

Öncelikle kodumuzun using kısmına System.Net ve System.Net.Mail namespace’ini eklememiz gerekiyor.

.Net Framework, System.Net.Mail namespace‘i içerisinde çeşitli class‘lar aracılığı ile uygulamanız içerisinden kolaylıkla e-posta gönderilmesini mümkün kılıyor.

using System.Net.Mail;
using System.Net;

İlk yapmamız gereken, SmtpClient sınıfından bir örnek oluşturmak ve bazı özelliklerini ayarlamak.

SmtpClient sc = new SmtpClient();
sc.Port = 587;
sc.Host = "smtp.live.com";
sc.EnableSsl = true;

Port özelliği ile, Smtp sunucusuna erişeceğimiz port numarasını belirliyoruz

Host özelliği ile, Hotmail Smtp sunucusunun adresini belirliyoruz

EnableSsl özelliği ile, Hotmail Smtp sunucusuna bağlanacağımız protokolu belirliyoruz. Eğer true değer atarsak https, eğer false değer atarsak http protokolü kullanılır.

Hotmail e-posta adresimizi ve şifremizi, Credentials özelliğine NetworkCredential sınıfından bir örnek ile atamamız gerekiyor.

sc.Credentials = new NetworkCredential("eposta@hotmail.com", "hotmail_sifre");

SmtpClient örneği üzerinden gönderilecek posta, MailMessage tipinde olmalıdır. Bir sonraki adımda MailMessage sınıfından bir örnek oluşturuyoruz.

MailMessage mail = new MailMessage();

mail.From = new MailAddress("eposta@hotmail.com", "Ekranda Görünecek İsim");

mail.To.Add("alici1@mail.com");
mail.To.Add("alici2@mail.com");

mail.CC.Add("alici3@mail.com");
mail.CC.Add("alici4@mail.com");

mail.Subject = "E-Posta Konusu";
mail.IsBodyHtml = true;
mail.Body = "E-Posta İçeriği";

mail.Attachments.Add(new Attachment(@"C:\Rapor.xlsx"));
mail.Attachments.Add(new Attachment(@"C:\Sonuc.pptx"));

Son olarak, SmtpClient sınıfının Send() method’unu kullanarak, oluşturduğumuz MailMessage örneğini gönderiyoruz.

sc.Send(mail);

Kodların toparlanmış hali;

using System;
using System.Net.Mail;
using System.Net;

class Program
{
	static void Main(string[] args)
	{
		SmtpClient sc = new SmtpClient();
		sc.Port = 587;
		sc.Host = "smtp.live.com";
		sc.EnableSsl = true;
		sc.Timeout = 50000;

		sc.Credentials = new NetworkCredential("eposta@hotmail.com", "hotmail_sifre");

		MailMessage mail = new MailMessage();

		mail.From = new MailAddress("eposta@hotmail.com", "Ekranda Görünecek İsim");

		mail.To.Add("alici1@mail.com");
		mail.To.Add("alici2@mail.com");

		mail.CC.Add("alici3@mail.com");
		mail.CC.Add("alici4@mail.com");

		mail.Subject = "E-Posta Konusu";
		mail.IsBodyHtml = true;
		mail.Body = "E-Posta İçeriği";

		mail.Attachments.Add(new Attachment(@"C:\Rapor.xlsx"));
		mail.Attachments.Add(new Attachment(@"C:\Sonuc.pptx"));

		sc.Send(mail);
	}
}

2011 Build Konferansı İkinci Gün Raporu

17 Eylül 2011 Yorum yapılmamış

Blog’umun 200. yazısını beni kırmayarak sevgili Daron Yöndem yazdı. Aslında tek bir yazı yazacaktı, fakat Microsoft‘un Build Konferans‘ına katıldığı için bir yazı serisine dönüştü. Hergün izlenimlerini sizlerle paylaşıyor olacağım. Yazıların orjinallerini Daron Yöndem‘in kendi blog’undan da takip edebilirsiniz. Ayrıca twitter‘dan da takip etmenizi öneririm; @daronyondem

Söz Daron’da… Devamını oku…

2011 Build Konferansı Birinci Gün Raporu

17 Eylül 2011 Yorum yapılmamış

Blog’umun 200. yazısını beni kırmayarak sevgili Daron Yöndem yazdı. Aslında tek bir yazı yazacaktı, fakat Microsoft‘un Build Konferans‘ına katıldığı için bir yazı serisine dönüştü. Hergün izlenimlerini sizlerle paylaşıyor olacağım. Yazıların orjinallerini Daron Yöndem‘in kendi blog’undan da takip edebilirsiniz. Ayrıca twitter‘dan da takip etmenizi öneririm; @daronyondem

Söz Daron’da… Devamını oku…

HTML TextArea elemanına girilebilecek karakter sayısını sınırlamak

17 Eylül 2010 2 yorum

HTML‘de metin kutularına (<input type=”text” />) girilebilecek karakter sayısını maxlength özelliği ile kısıtlayabiliyoruz;

<input type="text" id="AdSoyad" maxlength="75" />

Fakat TextArea elemanı için maxlength özelliği yer almamaktadır.

Eğer TextArea elemanı için maxlength özelliğini sağlamak istersek, sayfamıza javascript kodu eklememiz gerekir.

Örneğin, ilgili TextArea elemanına 100 karakterlik bir sınır koymak istiyorsak, aşağıdaki javascript kodunu sayfamıza ekleyebiliriz;

<script type="text/javascript">
	function TextAreaKarakterSayisiDogrula()
	{
		var sonSayi = 100 - document.getElementById("Adres").value.length;
		if (sonSayi >= 0)
		{
			document.getElementById("KalanKarakterSayac").innerHTML = sonSayi;
		}
		else
		{
			document.getElementById("Adres").value = document.getElementById("Adres").value.substring(0, 100);
			document.getElementById("KalanKarakterSayac").innerHTML = 0;
		}
	}
</script>

<textarea id="Adres" onkeyup="TextAreaKarakterSayisiDogrula()" cols="20" rows="5"></textarea>

Kalan karakter sayısı : <span id="KalanKarakterSayac">100</span>

Örnek kodu herhangi bir html sayfasına koyarsanız, farklı tarayıcılarda sorun çıkartmadan çalışacaktır.

C# ile GMail üzerinden e-posta gönderme

07 Temmuz 2010 6 yorum

Windows uygulamalarınız üzerinden e-posta gönderebilmek güzel bir özellik.

Uygulama içerisinden e-posta gönderme konusunda ilk akla gelen sorulardan bir tanesi, “GMail üzerinden e-posta gönderebilir miyim?” oluyor.

Bu yazımda, GMail üzerinden e-posta gönderebileceğimiz bir uygulama geliştireceğim.

Öncelikle kodumuzun using kısmına System.Net ve System.Net.Mail namespace’ini eklememiz gerekiyor.

.Net Framework, System.Net.Mail namespace‘i içerisinde çeşitli class‘lar aracılığı ile uygulamanız içerisinden kolaylıkla e-posta gönderilmesini mümkün kılıyor.

using System.Net.Mail;
using System.Net;

İlk yapmamız gereken, SmtpClient sınıfından bir örnek oluşturmak ve bazı özelliklerini ayarlamak.

SmtpClient sc = new SmtpClient();
sc.Port = 587;
sc.Host = "smtp.gmail.com";
sc.EnableSsl = true;

Port özelliği ile, Smtp sunucusuna erişeceğimiz port numarasını belirliyoruz

Host özelliği ile, GMail Smtp sunucusunun adresini belirliyoruz

EnableSsl özelliği ile, GMail Smtp sunucusuna bağlanacağımız protokolu belirliyoruz. Eğer true değer atarsak https, eğer false değer atarsak http protokolü kullanılır.

GMail e-posta adresimizi ve şifremizi, Credentials özelliğine NetworkCredential sınıfından bir örnek ile atamamız gerekiyor.

sc.Credentials = new NetworkCredential("eposta@gmail.com", "gmail_sifre");

SmtpClient örneği üzerinden gönderilecek posta, MailMessage tipinde olmalıdır. Bir sonraki adımda MailMessage sınıfından bir örnek oluşturuyoruz.

MailMessage mail = new MailMessage();

mail.From = new MailAddress("eposta@gmail.com", "Ekranda Görünecek İsim");

mail.To.Add("alici1@mail.com");
mail.To.Add("alici2@mail.com");

mail.CC.Add("alici3@mail.com");
mail.CC.Add("alici4@mail.com");

mail.Subject = "E-Posta Konusu";
mail.IsBodyHtml = true;
mail.Body = "E-Posta İçeriği";

mail.Attachments.Add(new Attachment(@"C:\Rapor.xlsx"));
mail.Attachments.Add(new Attachment(@"C:\Sonuc.pptx"));

Son olarak, SmtpClient sınıfının Send() method’unu kullanarak, oluşturduğumuz MailMessage örneğini gönderiyoruz.

sc.Send(mail);

Kodların toparlanmış hali;

using System;
using System.Net.Mail;
using System.Net;

class Program
{
	static void Main(string[] args)
	{
		SmtpClient sc = new SmtpClient();
		sc.Port = 587;
		sc.Host = "smtp.gmail.com";
		sc.EnableSsl = true;

		sc.Credentials = new NetworkCredential("eposta@gmail.com", "gmail_sifre");

		MailMessage mail = new MailMessage();

		mail.From = new MailAddress("eposta@gmail.com", "Ekranda Görünecek İsim");

		mail.To.Add("alici1@mail.com");
		mail.To.Add("alici2@mail.com");

		mail.CC.Add("alici3@mail.com");
		mail.CC.Add("alici4@mail.com");

		mail.Subject = "E-Posta Konusu"; mail.IsBodyHtml = true; mail.Body = "E-Posta İçeriği";

		mail.Attachments.Add(new Attachment(@"C:\Rapor.xlsx"));
		mail.Attachments.Add(new Attachment(@"C:\Sonuc.pptx"));

		sc.Send(mail);
	}
}

ASP.NET 4.0 ile Temizlenmiş web.config Dosyası

12 Ocak 2010 Yorum yapılmamış

ASP.NET 3.0 ve ASP.NET 3.5 ile web.config Dosyası

ASP.NET yıllar içerisinde gelişti, buna bağlı olarak web.config dosyasında tutulan ayarlarda da gözle görülür bir artış oldu. .Net Framework 3.5 SP1 kurulu olan bilgisayarımda yeni oluşturduğum bir Web Uygulamasının web.config dosyası aşağıdaki gibi oluyor.

< ?xml version="1.0"?>

		

				

Web uygulamasına özgü ayarlar yapılmaya başlandığında (ConnectionStrings, Authentication, AppSettings, vs) web.config dosyası da büyümeye ve karmaşıklaşmaya devam ediyor. Fakat web uygulamalarının büyük oranında bu ayarların birçoğu değiştirilmeden bırakılır.

ASP.NET 4.0 ile web.config dosyamız, ilk versiyonlarda olduğu gibi sadeleşiyor.

Visual Studio 2010‘da Empty ASP.NET Web Application şablonu ile yeni bir web projesi oluşturursanız, web.config dosyası aşağıdaki gibi oluşturuluyor;

< ?xml version="1.0"?>

		
				
		
		
			
		

İlk konfigürasyon satırı ASP.NET uygulamasının debug edilebileceğini ve Framework versiyonunun 4.0 olduğunu bildiriyor.

İkinci konfigürasyon satırı ise, web uygulamasının IIS7 üzerinde host edildiği durumlarda URL Rewrite yapabilmek için gerekli.

ASP.NET 4.0 SEO Geliştirmeleri

12 Ocak 2010 1 yorum

Search Engine Optimization (Arama Motoru Optimizasyonu), internette yayınlanan her site için çok önemlidir. Günümüzde sitelerin trafiklerinin büyük oranı arama motorlarından gelmektedir. Web sitelerinin arama sonuçlarında daha iyi yer edinmeleri alacakları trafik açısından gittikçe daha önemli hale gelmektedir.

Web sitenizin SEO-Uyumluluğunu Google Analytics ile kolaylıkla ölçebilirsiniz.

ASP.NET 4.0 SEO Geliştirmeleri

ASP.NET 4.0 SEO uyumluluğu ile ilgili olarak bir dizi yenilik-geliştirme ile birlikte geliyor. Bunlardan bazıları;

  • Yeni Page.MetaKeywords ve Page.MetaDescription özellikleri
  • ASP.NET Web Forms’ta yeni gelen URL Yönlendirme (URL Routing) desteği
  • Yeni Response.RedirectPermanent() methodu

Bu özellikleri inceleyelim;

Page.MetaKeywords and Page.MetaDescription Özellikleri

Arama motorlarının crawler dediği programcıklar, sitenizi indekslerken, <head> tagı içerisinde yeralan <meta name=”keywords”> ve <meta name=”description”> taglarını kullanarak sitenizi kategorize eder.

<head runat="server">
	<title>Örnek Sayfa</title>
	<meta name="keywords" content="aspnet, engin polat, geliştirme, framework" />
	<meta name="description" content="ASP.NET 4.0 ile yeni gelen özellikler" />
</head>

ASP.NET 4.0′dan önce, bu taglara programatik olarak erişmek mümkün değildi. ASP.NET 4.0 ile birlikte aşağıdaki kodları yazabiliyoruz;

public void Page_Load(object sender, EventArgs e)
{
	Page.Title = "Örnek Sayfa";

	Page.MetaKeywords = "aspnet, engin polat, geliştirme, framework";
	Page.MetaDescription = "ASP.NET 4.0 ile yeni gelen özellikler";
}
<%@ Page Title="Örnek Sayfa"
	Keywords = "aspnet, engin polat, geliştirme, framework"
	Description = "ASP.NET 4.0 ile yeni gelen özellikler"
	CodeBehind = "OrnekSayfa.aspx.cs"
	Inherits = "OrnekWebSitesi.OrnekSayfa" %>

Yukarıdaki kodlar sayesinde Page sınıfının Keyword ve Description özelliklerine programatik olarak erişmek mümkündür.

ASP.NET Web Formlarında URL Yönlendirme (URL Routing)

URL Yönlendirme özelliği ilk olarak ASP.NET 3.5 SP1 ile gelmişti ve ASP.NET MVC ile zaten kullanabiliyorduk. URL Yönlendirme özelliği sayesinde, web uygulamasına gelecek tüm isteklerin fiziksel dosyalara gelmesi zorunluluğu ortadan kalkıyor. Artık aşağıdakiler gibi Arama Motoru Uyumlu (SEO – Friendly) URL’ler tanımlayabiliyoruz;

http://www.orneksite.com/sayfa.aspx?id=5
yerine
http://www.orneksite.com/sayfa/hakkinda

veya

http://www.orneksite.com/urunler.aspx?kategori=yazilim
yerine
http://www.orneksite.com/urunler/yazilim

ASP.NET 4.0 URL Yönlendirme (URL Routing) ile ilgili detaylı bir yazıyı yakında yayınlayacağım.

Response.RedirectPermanent() methodu

Web uygulamalarımızda, belli durumlarda akışı başka bir sayfaya yönlendirmek sıklıkla yaptığımız birşeydir. ASP.NET ile genellikle Response.Redirect() method’unu kullanırız. Aslında Response.Redirect() method’unun yaptığı şey, browser’a HTTP 302 (Temporary Redirect – Geçici Yönlendirme) sonucu döndürmektir. Böylece browser yönlendirmek istenen sayfadan akışa devam eder.

Arama motorlarının sayfaları indexlemeye yarayan crawler uygulamaları, bir sayfadan diğerine geçici olarak yönlendirme olduğunu gördüğünde (HTTP 302 mesajı) akışa yeni sayfadan devam etmez. Bu da sitenizde bulunmasına rağmen indexlenmeyen sayfalar oluşmasına yol açar.

ASP.NET 4.0 ile birlikte Response.RedirectPermanent() method’u geliyor. Bu method çağırıldığında, browser’a HTTP 302 mesajı yerine HTTP 301 (Moved Permanently – Kalıcı Olarak Taşındı) mesajı döndürür. Crawler’lar, HTTP 301 mesajı gördüklerinde akışa yeni sayfadan devam ettikleri için, web sitesinin tamamı indexlenecektir.

Response.Redirect(“YeniSayfa.aspx”); // HTTP 302 mesajı ile YeniSayfa.aspx’ten akış devam eder. Crawler indexlemez.

Response.RedirectPermanent(“YeniSayfa.aspx”); // HTTP 301 mesajı ile YeniSayfa.aspx’ten akış devam eder. Crawler indexler.

ASP.NET MVC ile kullanılmak üzere Response.RedirectToRoutePermanent() methodu geliyor.

Response.RedirectToRoute(“Urunler-Listele”, new { kategori = “yazilim” }); // HTTP 302 mesajı döner. Crawler indexlemez.

yerine

Response.RedirectToRoutePermanent(“Urunler-Listele”, new { kategori = “yazilim” }); // HTTP 301 mesajı döner. Crawler indexler.

Sonuç olarak, ASP.NET 4.0 Arama Motoru Dostu ( SEO – Friendly ) uygulama yazmayı kolaylaştıran araçlara sahip olarak geliyor.

C# ile Image Crawler Uygulaması

29 Aralık 2009 3 yorum

Daha önce yazdığımız C# ile WebCrawler Uygulamasına ek olarak, bu sefer, sayfadaki resimleri bulup, ekranda gösteren bir uygulama yazacağız.

Uygulamamız, bir web sayfasına bağlacak, sayfadaki img taglarının src değerlerini bir diziye dolduracak ve bu diziyi ekranda gösterecek. Dizi’den bir satır seçildiğinde, ilgili resmi ekrana getirecek.

Hemen aşağıdaki ekran görüntüsünü oluşturarak uygulamayı yazmaya başlayalım;

Bir web sayfasındaki resimleri bulmak için, List<string> tipinde değer döndüren ResimleriBul() isimli fonksiyon yazacağız. Bu fonksiyon adres bilgisini parametre olarak alacak, sayfadaki her img tagının src özelliğini bir listeye ekleyecek. Geriye bu liste’yi döndürecek.

private List<string> ResimleriBul(string adres)
{
	List<string> arrReturn = new List<string>();

	WebRequest wr = WebRequest.Create(txtAdres.Text);
	WebResponse ws = wr.GetResponse();
	StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8);
	string response = sr.ReadToEnd();
	sr.Close();
	ws.Close();

	string imageHtmlCode = "<img";
	string imageSrcCode = "src=\"";

	int index = response.IndexOf(imageHtmlCode);
	while (index != -1)
	{
		response = response.Substring(index);

		int tagSonu = response.IndexOf('>');
		int baslangic = response.IndexOf(imageSrcCode) + imageSrcCode.Length;
		int bitis = response.IndexOf('"', baslangic + 1);

		if (bitis > baslangic && baslangic < tagSonu)
			arrReturn.Add(response.Substring(baslangic, bitis - baslangic));

		if (imageHtmlCode.Length < response.Length)
			index = response.IndexOf(imageHtmlCode, imageHtmlCode.Length);
		else
			index = -1;
	}

	return arrReturn;
}

ResimleriBul butonunun Click olayında, ResimleriBul() fonksiyonunun döndürdüğü her öğe, ListBox kontrolüne dolduracak.

private void btnResimleriBul_Click(object sender, EventArgs e)
{
	lbResimListe.Items.Clear();

	foreach (string image in ResimleriBul(txtAdres.Text))
		lbResimListe.Items.Add(image);
}

Son olarak, ListBox’ın seçili elemanı her değiştiğinde, PictureBox’ta seçili resim gösterilecek.

private void lbResimListe_SelectedIndexChanged(object sender, EventArgs e)
{
	pbResim.Load(lbResimListe.SelectedItem.ToString());
}

Uygulamanın kaynak kodlarını buradan indirebilirsiniz.

C# ile Google Url Kısaltma Servisini Kullanmak

29 Aralık 2009 8 yorum

Adres kısaltma servisleri ile uzun internet linklerini kısaltmak mümkündür. İnternette birçok adres kısaltma servisi şu anda hizmet vermektedir. Birkaç tanesine örnek olarak;

Facebook adres kısaltma servisleri listesine http://fb.me ile katıldı.

Tabii Google’da boş durmadı ve hemen kolları sıvayarak adres kısaltma servisi http://goo.gl duyurdu.

Bu yazımda, C# ile bu servisi nasıl kullanabileceğimizi anlatacağım.

Öncelikle ekranımızı aşağıdaki resimdeki gibi tasarlayalım;

Uygulamanın anahtar parçası, Kısalt butonunun Click olayında gerçekleşiyor. Google Url Shortener servisini kullanmak için http://ggl-shortener.appspot.com adresine url parametresi ile kısaltılmak istenen adres geçilmeli.

Biz bunu şöyle gerçekleştireceğiz;

WebRequest wr = WebRequest.Create(string.Format("http://ggl-shortener.appspot.com/?url={0}", txtAdres.Text));
WebResponse ws = wr.GetResponse();
StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8);
string response = sr.ReadToEnd();
sr.Close();
ws.Close();

Dönen JSON sonucu, çok kısa ve basit olduğu için basit bir Temizle fonksiyonuna sokacağız,

private string Temizle(string Metin, string Temizlenecek)
{
string oReturn = Metin;

foreach (char c in Temizlenecek)
	oReturn = oReturn.Replace(c.ToString(), string.Empty);

return oReturn.Replace("short_url:", "").Trim();
}

Böylece, Kısalt butonunun Click olayına şu satırları da ekleyebiliriz;

lblAdres.Text = txtAdres.Text;
lblKisaAdres.Text = Temizle(response, "{ }\\,;\"");

Artık tek yapmamız gereken, uygulamayı çalıştırmak ve bir adres girip, Kısalt butonuna tıklamak;

Uygulamanın kaynak kodlarını buradan indirebilirsiniz.