C#’ta WebClient Nesnesi İle Kodsal POST İşlemiyle Birlikte Gelen JSON Verilerini Elde Ederek İşleme

Merhaba,

Biliyorsunuz ki, ben deniz bot yazılımları üzerinde çalışmakta ve bu konuda birçok projeye imza atmış bulunmaktayım. Haliyle yapmış olduğum çalışmalar sırasında elde ettiğim tüm tecrübe ve bilgiyi sizlere paylaşmakta ve bot yazılımlarında işe yarabilecek yöntem, teknik ve yaklaşımlar üzerine görüşlerimi ortaya koymaktayım. İşte bundan dolayı siz değerli okuyucularımdan da kâh bilgim doğrultusunda kâh daha farklı boyutlarda sorular gelmekte ve elimden geldiğince bu soruları cevapladırmaya çalışmaktayım.

Bu içeriğimizde, başlıktanda anlaşılacağı gibi programatik olarak siteler üzerinde post işlemi yapmayı göreceğiz ve bunun yanında POST işlemleri neticesinde geriye JSON veri yapısı dönen bir BACK durumu varsa eğer ilgili veriyi tekrar programatik elde edip üzerinde işlem yapmayı inceleyeceğiz.

Evet…

Makalemizin seyri yukarıdaki paragraftaki sıralamada olduğu gibi ilk olarak programatik POST işlemini ele alarak başlayacak devamında ise geriye JSON veri yapısı dönen tüm durumları değerlendireceğimiz şekilde yolun sonuna varacaktır.

Tabi tüm makale süreci genel olarak localde oluşturduğum birer adet Web ve Windows projelerinin üzerinde test edilecektir. Web projemiz, yazının devamında da göreceğiniz üzere localde çalışıyor olacak ve bot tarafından gelen POST taleplerini Break – Point ile görmemizi sağlayacaktır. Windows projesi ise botu inşa edeceğimiz sahamız olacaktır.

O halde buyrun başlayalım…

WebClient Nesnesi İle Kodsal POST İşlemi

Web projemizde aşağıdaki gibi bir Controller oluşturalım.

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Index(object id)
        {
            Response.Write("Çıktı olarak " + id.ToString());
            return View();
        }
    }

Ve Break – Point ile “Index” metodunun “HttpPost” attribute’u ile işaretlenmiş olanını aşağıdaki ekran görüntüsünde olduğu gibi işaretleyerek süreci anlık olarak takip edelim.
C#'ta WebClient Nesnesi İle Kodsal POST İşlemiyle Birlikte Gelen JSON Verilerini Elde Ederek İşleme
Tabi bir yandan da web projemizi derleyip çalıştırmayı unutmamalıyız.
C#'ta WebClient Nesnesi İle Kodsal POST İşlemiyle Birlikte Gelen JSON Verilerini Elde Ederek İşleme
Web projemizin IIS tarafından çalıştırılan bir uygulama olduğuna kanaat getirdikten sonra artık botumuzla ilgili Action üzerine programatik olarak post talebinde bulunabiliriz. Tabi ki de bu işlemi botu inşa etmek için karar verdiğimiz Windows Form projemiz üzerinde çalışmayı gerçekleştireceğiz.

Formumuzun tasarımı aşağıdaki ekran görüntüsünde olduğu gibidir.
C#'ta WebClient Nesnesi İle Kodsal POST İşlemiyle Birlikte Gelen JSON Verilerini Elde Ederek İşleme
Burada “Parametre” olarak TextBox nesnesinden alınan değer POST’u gerçekleştireceğimiz “Index” Action metodundaki “id” parametresine göndereceğimizi değerdir. Ne kadar parametre gerekiyorsa görselde siz bir o kadar TextBox ekleyebilir ya da farklı şekilde ilgili değerleri parametre olarak gönderebilirsiniz.

        private void button1_Click(object sender, EventArgs e)
        {
            using (WebClient client = new WebClient())
            {
                try
                {
                    #region POST YAPILIYOR
                    string postUrl = "http://localhost:57460/Home/Index";
                    var gelenYanit = client.UploadValues(postUrl, new NameValueCollection() { { "id", textBox1.Text } });
                    #endregion
                    #region POST NETİCESİNDE ÇIKTI ALINIYOR
                    string result = System.Text.Encoding.UTF8.GetString(gelenYanit);
                    MessageBox.Show(result);
                    #endregion
                }
                catch
                {

                }
            }
        }

Şuana kadar yapmış olduğumuz POST çalışmasında geriye bir JSON formatında bir değer döndürülmediği için var olan çıktıyı sayfanın kaynak kodu olarak string değerde elde ediyoruz.

Aşağıdaki video sayesinde yapmış olduğumuz çalışmanın işleyişini inceleyebilir, bot tarafından yapılan POST talebinin gerçekleştiğini ve gerekli alanın Break – Point ile takip edilebildiğini görebilirsiniz.

Şimdi ise sıra bir diğer öncülümüz JSON veri yapısı dönen POST işlemlerini değerlendirmeye gelmiştir.

WebClient Nesnesi İle Kodsal POST İşlemi Neticesinde Dönen JSON Değerini Yakalama

Bu işlem için yukarıda oluşturduğumuz web projesi üzerinde aşağıdaki gibi bazı değişiklikler yapmamız yeterlidir.

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public JsonResult Index(object id)
        {
            var JSONVeri = new
            {
                a = "a verisi",
                b = "b verisi",
                c = 3,
                d = true
            };
            return Json(JSONVeri, JsonRequestBehavior.AllowGet);
        }
    }

Dikkat ederseniz “Index” Action metodu “JsonResult” tipinden geriye değer dönen bir metotdur. Yani bir başka deyişle “JsonResult” tipinden bir metotdur. Haliyle bu metoda yapılan POST işlemi neticesinde içerisindeki JSONVeri isimli Anonymous Type olan nesnemizi JSON formatında geriye göndermektedir.

Web projemizin localde çalıştığını varsayarak tekrardan botun inşa kısmına gelelim ve aşağıdaki işlemleri uygulayalım.

        private void button1_Click(object sender, EventArgs e)
        {
            using (WebClient client = new WebClient())
            {
                try
                {
                    #region POST YAPILIYOR
                    string postUrl = "http://localhost:57460/Home/Index";
                    client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
                    string result = client.UploadString(postUrl, "POST", "{id: \"" + textBox1.Text + "\"}");
                    #endregion
                    #region POST NETİCESİNDE ÇIKTI ALINIYOR
                    MessageBox.Show(result);
                    #endregion
                }
                catch 
                {

                }
            }
        }

Tabi bu işlemi bir başka şekilde aşağıdaki gibide yapabiliriz.

        private void button1_Click(object sender, EventArgs e)
        {
            using (WebClient client = new WebClient())
            {
                try
                {
                    #region POST YAPILIYOR
                    var JSONData = new { id = textBox1.Text };
                    var dataString = JsonConvert.SerializeObject(JSONData);
                    string result = client.UploadString("http://localhost:57460/Home/Index", "POST", dataString);
                    #endregion
                    #region POST NETİCESİNDE ÇIKTI ALINIYOR
                    MessageBox.Show(result);
                    #endregion
                }
                catch 
                {

                }
            }
        }

Tabi bu yöntemi uygulayabilmek için Nuget’tan Newtonsoft.Json kütüphanesini projenize entegre etmeniz gerekmektedir.

Ve şimdide son olarak hali hazırda çalışmakta olan bir internet sitesi için programatik POST işlemi gerçekleştirecek ve geriye döndürülen JSON verisini işleyip okuyabilecek bir örnek uygulama yaparak konumuzu noktalayalım.

        private void button1_Click(object sender, EventArgs e)
        {
            using (WebClient client = new WebClient())
            {
                try
                {
                    #region POST YAPILIYOR
                    client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
                    var JSONData = new { SoruID = 5, CevapID = 36 };
                    var dataString = JsonConvert.SerializeObject(JSONData);
                    string result = client.UploadString("http://www.lisanca.net/Anket/AnketOyla", "POST", dataString);
                    #endregion
                    #region POST NETİCESİNDE ÇIKTI ALINIYOR
                    MessageBox.Show(result);
                    #endregion
                }
                catch
                {

                }
            }
        }

Bu makalede ele aldığımız teknik üzerine bundan sonraki botlarımızda bir tek kaynak kod üzerinde değil server üzerinde de işlemler gerçekleştirebileceğiz ve bu işlem neticesinde elde edilen sonuçlar üzerinde de çalışmalarımızı icra edebileceğiz.

Tabi ki de bu çalışmalar askerden sonraya kalmış bulunmakta 🙂
5 ay 5 gün sonra görüşmek üzere inşallah…

İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

CAPTCHA (Şahıs Denetim Kodu) Resmi

*

Copy Protected by Chetan's WP-Copyprotect.