in Eski Blog Yazılarım

SHOUTcast için ufak bir ipucu.

Power grubun yayınlarını yaptığımız için sık sık SHOUTcast,
Wowza ve Windows
Media Server
  gibi streaming yapan sunucularla muhatap
oluyoruz. Sunucular da ki ve radyolar da ki genel durumu görmek ve
bazı bilgileri toplamak için ufak çapta bir uygulama hazırlamaya karar verdik. Bizim için en önemli veri’de radyo’nun anlık dinleyici sayısıydı.

Wowza’nın
ve Windows Media’nin anlık user durumuna kolayca erişebildim fakat
SHOUTcast’in anlık kullanıcı durumuna erişmek o kadar da
kolay olmadı.
Bu işi yaptıracak external bir tool yazmak içinde her
zamanki gibi zaman yoktu. Onun için SHOUTcast ‘ın web sayfasına
bağlanıp basit bir HttpRequest
nesnesi ile işi halledebilirim diye düşündüm.

Fakat SHOUTcast
‘ın Web server’ı belirli standartlara göre tasarlanmadığı için çeşitli
hatarlarla karşılatım

birinci kronik hata:

"The server committed a protocol violation.
Section=ResponseStatusLine"

Bu sorunun nedeni .Net
Framework’ün security anlayışı ile alakalıymış .Net 2.0’dan sonra useUnsafeHeaderParsing diye bir config ayarı koymuşlar. Bunla developer’ın bilerek saçma header’lar almasını
sağlamışlar.
Aşağıdaki ayarı yaptıktan sonra bu hatayı atladım.

xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing = "true"/>
settings>
system.net>
configuration>

ikinci
kronik hata:

Stream oluşturup GetRequestStream() ile bellek’e
yerleştirdiğim zamanda Stream’in bilmediğim bazı şeyleri
desteklememesinden dolayı aşağıdaki hata ile karşılaştım.

"Cannot send a content-body with this
verb-type"

Daha sonra Request’i GetResponse()
ile HttpWebResponse’u alıp onunda GetResponseStream()
metodunu StreamReader’a alınca (burdaki Stream o bilmediğim bazı
şeyleri destekliyormuş sanırım).
Bu sorunuda geçtik ve o güzelim
SHOUTcast HTML’sini parse etmek için string nesneme aldım.

Sonuç
olarak aşağıda ki kod ortaya çıktı.

        static string SHOUTcastHtml(string uri)
{
String html_data = String.Empty;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.ContentType = "text/html";
request.Headers.Clear(); // Default header'larýn temizlenmesi gerekiyor.
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)";

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader s_stream = new StreamReader(response.GetResponseStream()))
{
html_data = s_stream.ReadToEnd();
}
response.Close();

return html_data;
}

Bir gün SHOUTcast bilgilerine ihtiyacınız olursa kullanabilirsiniz.

Yorum Bırak

Comment