﻿
{"id":6909,"date":"2017-09-11T14:22:59","date_gmt":"2017-09-11T14:22:59","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=6909"},"modified":"2017-09-11T14:22:59","modified_gmt":"2017-09-11T14:22:59","slug":"cta-webclient-nesnesi-ile-kodsal-post-islemiyle-birlikte-gelen-json-verilerini-elde-ederek-isleme","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-webclient-nesnesi-ile-kodsal-post-islemiyle-birlikte-gelen-json-verilerini-elde-ederek-isleme\/","title":{"rendered":"C#&#8217;ta WebClient Nesnesi \u0130le Kodsal POST \u0130\u015flemiyle Birlikte Gelen JSON Verilerini Elde Ederek \u0130\u015fleme"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Biliyorsunuz ki, ben deniz bot yaz\u0131l\u0131mlar\u0131 \u00fczerinde \u00e7al\u0131\u015fmakta ve bu konuda bir\u00e7ok projeye imza atm\u0131\u015f bulunmaktay\u0131m. Haliyle yapm\u0131\u015f oldu\u011fum \u00e7al\u0131\u015fmalar s\u0131ras\u0131nda elde etti\u011fim t\u00fcm tecr\u00fcbe ve bilgiyi sizlere payla\u015fmakta ve bot yaz\u0131l\u0131mlar\u0131nda i\u015fe yarabilecek y\u00f6ntem, teknik ve yakla\u015f\u0131mlar \u00fczerine g\u00f6r\u00fc\u015flerimi ortaya koymaktay\u0131m. \u0130\u015fte bundan dolay\u0131 siz de\u011ferli okuyucular\u0131mdan da k\u00e2h bilgim do\u011frultusunda k\u00e2h daha farkl\u0131 boyutlarda sorular gelmekte ve elimden geldi\u011fince bu sorular\u0131 cevaplad\u0131rmaya \u00e7al\u0131\u015fmaktay\u0131m.<\/p>\n<p>Bu i\u00e7eri\u011fimizde, ba\u015fl\u0131ktanda anla\u015f\u0131laca\u011f\u0131 gibi programatik olarak siteler \u00fczerinde post i\u015flemi yapmay\u0131 g\u00f6rece\u011fiz ve bunun yan\u0131nda POST i\u015flemleri neticesinde geriye JSON veri yap\u0131s\u0131 d\u00f6nen bir BACK durumu varsa e\u011fer ilgili veriyi tekrar programatik elde edip \u00fczerinde i\u015flem yapmay\u0131 inceleyece\u011fiz.<\/p>\n<p>Evet&#8230;<\/p>\n<p>Makalemizin seyri yukar\u0131daki paragraftaki s\u0131ralamada oldu\u011fu gibi ilk olarak programatik POST i\u015flemini ele alarak ba\u015flayacak devam\u0131nda ise geriye JSON veri yap\u0131s\u0131 d\u00f6nen t\u00fcm durumlar\u0131 de\u011ferlendirece\u011fimiz \u015fekilde yolun sonuna varacakt\u0131r.<\/p>\n<p>Tabi t\u00fcm makale s\u00fcreci genel olarak localde olu\u015fturdu\u011fum birer adet Web ve Windows projelerinin \u00fczerinde test edilecektir. Web projemiz, yaz\u0131n\u0131n devam\u0131nda da g\u00f6rece\u011finiz \u00fczere localde \u00e7al\u0131\u015f\u0131yor olacak ve bot taraf\u0131ndan gelen POST taleplerini Break &#8211; Point ile g\u00f6rmemizi sa\u011flayacakt\u0131r. Windows projesi ise botu in\u015fa edece\u011fimiz saham\u0131z olacakt\u0131r.<\/p>\n<p>O halde buyrun ba\u015flayal\u0131m&#8230;<\/p>\n<h4>WebClient Nesnesi \u0130le Kodsal POST \u0130\u015flemi<\/h4>\n<p>Web projemizde a\u015fa\u011f\u0131daki gibi bir Controller olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n        &#x5B;HttpPost]\r\n        public ActionResult Index(object id)\r\n        {\r\n            Response.Write(&quot;\u00c7\u0131kt\u0131 olarak &quot; + id.ToString());\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>Ve Break &#8211; Point ile &#8220;Index&#8221; metodunun &#8220;HttpPost&#8221; attribute&#8217;u ile i\u015faretlenmi\u015f olan\u0131n\u0131 a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi i\u015faretleyerek s\u00fcreci anl\u0131k olarak takip edelim.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/09\/Cta-WebClient-Nesnesi-\u0130le-Kodsal-POST-\u0130\u015flemiyle-Birlikte-Gelen-JSON-Verilerini-Elde-Ederek-\u0130\u015fleme.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/09\/Cta-WebClient-Nesnesi-\u0130le-Kodsal-POST-\u0130\u015flemiyle-Birlikte-Gelen-JSON-Verilerini-Elde-Ederek-\u0130\u015fleme.png\" alt=\"C#&#039;ta WebClient Nesnesi \u0130le Kodsal POST \u0130\u015flemiyle Birlikte Gelen JSON Verilerini Elde Ederek \u0130\u015fleme\" width=\"524\" height=\"265\" class=\"aligncenter size-full wp-image-6922\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/09\/Cta-WebClient-Nesnesi-\u0130le-Kodsal-POST-\u0130\u015flemiyle-Birlikte-Gelen-JSON-Verilerini-Elde-Ederek-\u0130\u015fleme.png 524w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/09\/Cta-WebClient-Nesnesi-\u0130le-Kodsal-POST-\u0130\u015flemiyle-Birlikte-Gelen-JSON-Verilerini-Elde-Ederek-\u0130\u015fleme-300x152.png 300w\" sizes=\"auto, (max-width: 524px) 100vw, 524px\" \/><\/a><br \/>\nTabi bir yandan da web projemizi derleyip \u00e7al\u0131\u015ft\u0131rmay\u0131 unutmamal\u0131y\u0131z.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/09\/Cta-WebClient-Nesnesi-\u0130le-Kodsal-POST-\u0130\u015flemiyle-Birlikte-Gelen-JSON-Verilerini-Elde-Ederek-\u0130\u015fleme-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/09\/Cta-WebClient-Nesnesi-\u0130le-Kodsal-POST-\u0130\u015flemiyle-Birlikte-Gelen-JSON-Verilerini-Elde-Ederek-\u0130\u015fleme-1.png\" alt=\"C#&#039;ta WebClient Nesnesi \u0130le Kodsal POST \u0130\u015flemiyle Birlikte Gelen JSON Verilerini Elde Ederek \u0130\u015fleme\" width=\"474\" height=\"115\" class=\"aligncenter size-full wp-image-6924\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/09\/Cta-WebClient-Nesnesi-\u0130le-Kodsal-POST-\u0130\u015flemiyle-Birlikte-Gelen-JSON-Verilerini-Elde-Ederek-\u0130\u015fleme-1.png 474w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/09\/Cta-WebClient-Nesnesi-\u0130le-Kodsal-POST-\u0130\u015flemiyle-Birlikte-Gelen-JSON-Verilerini-Elde-Ederek-\u0130\u015fleme-1-300x73.png 300w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/a><br \/>\nWeb projemizin IIS taraf\u0131ndan \u00e7al\u0131\u015ft\u0131r\u0131lan bir uygulama oldu\u011funa kanaat getirdikten sonra art\u0131k botumuzla ilgili Action \u00fczerine programatik olarak post talebinde bulunabiliriz. Tabi ki de bu i\u015flemi botu in\u015fa etmek i\u00e7in karar verdi\u011fimiz Windows Form projemiz \u00fczerinde \u00e7al\u0131\u015fmay\u0131 ger\u00e7ekle\u015ftirece\u011fiz.<\/p>\n<p>Formumuzun tasar\u0131m\u0131 a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibidir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/09\/Cta-WebClient-Nesnesi-\u0130le-Kodsal-POST-\u0130\u015flemiyle-Birlikte-Gelen-JSON-Verilerini-Elde-Ederek-\u0130\u015fleme-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/09\/Cta-WebClient-Nesnesi-\u0130le-Kodsal-POST-\u0130\u015flemiyle-Birlikte-Gelen-JSON-Verilerini-Elde-Ederek-\u0130\u015fleme-2.png\" alt=\"C#&#039;ta WebClient Nesnesi \u0130le Kodsal POST \u0130\u015flemiyle Birlikte Gelen JSON Verilerini Elde Ederek \u0130\u015fleme\" width=\"199\" height=\"148\" class=\"aligncenter size-full wp-image-6928\" \/><\/a><br \/>\nBurada &#8220;Parametre&#8221; olarak TextBox nesnesinden al\u0131nan de\u011fer POST&#8217;u ger\u00e7ekle\u015ftirece\u011fimiz &#8220;Index&#8221; Action metodundaki &#8220;id&#8221; parametresine g\u00f6nderece\u011fimizi de\u011ferdir. Ne kadar parametre gerekiyorsa g\u00f6rselde siz bir o kadar TextBox ekleyebilir ya da farkl\u0131 \u015fekilde ilgili de\u011ferleri parametre olarak g\u00f6nderebilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void button1_Click(object sender, EventArgs e)\r\n        {\r\n            using (WebClient client = new WebClient())\r\n            {\r\n                try\r\n                {\r\n                    #region POST YAPILIYOR\r\n                    string postUrl = &quot;http:\/\/localhost:57460\/Home\/Index&quot;;\r\n                    var gelenYanit = client.UploadValues(postUrl, new NameValueCollection() { { &quot;id&quot;, textBox1.Text } });\r\n                    #endregion\r\n                    #region POST NET\u0130CES\u0130NDE \u00c7IKTI ALINIYOR\r\n                    string result = System.Text.Encoding.UTF8.GetString(gelenYanit);\r\n                    MessageBox.Show(result);\r\n                    #endregion\r\n                }\r\n                catch\r\n                {\r\n\r\n                }\r\n            }\r\n        }\r\n<\/pre>\n<p>\u015euana kadar yapm\u0131\u015f oldu\u011fumuz POST \u00e7al\u0131\u015fmas\u0131nda geriye bir JSON format\u0131nda bir de\u011fer d\u00f6nd\u00fcr\u00fclmedi\u011fi i\u00e7in var olan \u00e7\u0131kt\u0131y\u0131 sayfan\u0131n kaynak kodu olarak string de\u011ferde elde ediyoruz.<\/p>\n<p>A\u015fa\u011f\u0131daki video sayesinde yapm\u0131\u015f oldu\u011fumuz \u00e7al\u0131\u015fman\u0131n i\u015fleyi\u015fini inceleyebilir, bot taraf\u0131ndan yap\u0131lan POST talebinin ger\u00e7ekle\u015fti\u011fini ve gerekli alan\u0131n Break &#8211; Point ile takip edilebildi\u011fini g\u00f6rebilirsiniz.<br \/>\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/eZmqoQPXdYE\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>\u015eimdi ise s\u0131ra bir di\u011fer \u00f6nc\u00fcl\u00fcm\u00fcz JSON veri yap\u0131s\u0131 d\u00f6nen POST i\u015flemlerini de\u011ferlendirmeye gelmi\u015ftir.<\/p>\n<h4>WebClient Nesnesi \u0130le Kodsal POST \u0130\u015flemi Neticesinde D\u00f6nen JSON De\u011ferini Yakalama<\/h4>\n<p>Bu i\u015flem i\u00e7in yukar\u0131da olu\u015fturdu\u011fumuz web projesi \u00fczerinde a\u015fa\u011f\u0131daki gibi baz\u0131 de\u011fi\u015fiklikler yapmam\u0131z yeterlidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n        &#x5B;HttpPost]\r\n        public JsonResult Index(object id)\r\n        {\r\n            var JSONVeri = new\r\n            {\r\n                a = &quot;a verisi&quot;,\r\n                b = &quot;b verisi&quot;,\r\n                c = 3,\r\n                d = true\r\n            };\r\n            return Json(JSONVeri, JsonRequestBehavior.AllowGet);\r\n        }\r\n    }\r\n<\/pre>\n<p>Dikkat ederseniz &#8220;Index&#8221; Action metodu &#8220;JsonResult&#8221; tipinden geriye de\u011fer d\u00f6nen bir metotdur. Yani bir ba\u015fka deyi\u015fle &#8220;JsonResult&#8221; tipinden bir metotdur. Haliyle bu metoda yap\u0131lan POST i\u015flemi neticesinde i\u00e7erisindeki JSONVeri isimli Anonymous Type olan nesnemizi JSON format\u0131nda geriye g\u00f6ndermektedir.<\/p>\n<p>Web projemizin localde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 varsayarak tekrardan botun in\u015fa k\u0131sm\u0131na gelelim ve a\u015fa\u011f\u0131daki i\u015flemleri uygulayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void button1_Click(object sender, EventArgs e)\r\n        {\r\n            using (WebClient client = new WebClient())\r\n            {\r\n                try\r\n                {\r\n                    #region POST YAPILIYOR\r\n                    string postUrl = &quot;http:\/\/localhost:57460\/Home\/Index&quot;;\r\n                    client.Headers.Add(HttpRequestHeader.ContentType, &quot;application\/json&quot;);\r\n                    string result = client.UploadString(postUrl, &quot;POST&quot;, &quot;{id: \\&quot;&quot; + textBox1.Text + &quot;\\&quot;}&quot;);\r\n                    #endregion\r\n                    #region POST NET\u0130CES\u0130NDE \u00c7IKTI ALINIYOR\r\n                    MessageBox.Show(result);\r\n                    #endregion\r\n                }\r\n                catch \r\n                {\r\n\r\n                }\r\n            }\r\n        }\r\n<\/pre>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/n26v10AfG2E\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>Tabi bu i\u015flemi bir ba\u015fka \u015fekilde a\u015fa\u011f\u0131daki gibide yapabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void button1_Click(object sender, EventArgs e)\r\n        {\r\n            using (WebClient client = new WebClient())\r\n            {\r\n                try\r\n                {\r\n                    #region POST YAPILIYOR\r\n                    var JSONData = new { id = textBox1.Text };\r\n                    var dataString = JsonConvert.SerializeObject(JSONData);\r\n                    string result = client.UploadString(&quot;http:\/\/localhost:57460\/Home\/Index&quot;, &quot;POST&quot;, dataString);\r\n                    #endregion\r\n                    #region POST NET\u0130CES\u0130NDE \u00c7IKTI ALINIYOR\r\n                    MessageBox.Show(result);\r\n                    #endregion\r\n                }\r\n                catch \r\n                {\r\n\r\n                }\r\n            }\r\n        }\r\n<\/pre>\n<p>Tabi bu y\u00f6ntemi uygulayabilmek i\u00e7in Nuget&#8217;tan Newtonsoft.Json k\u00fct\u00fcphanesini projenize entegre etmeniz gerekmektedir.<\/p>\n<p>Ve \u015fimdide son olarak hali haz\u0131rda \u00e7al\u0131\u015fmakta olan bir internet sitesi i\u00e7in programatik POST i\u015flemi ger\u00e7ekle\u015ftirecek ve geriye d\u00f6nd\u00fcr\u00fclen JSON verisini i\u015fleyip okuyabilecek bir \u00f6rnek uygulama yaparak konumuzu noktalayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void button1_Click(object sender, EventArgs e)\r\n        {\r\n            using (WebClient client = new WebClient())\r\n            {\r\n                try\r\n                {\r\n                    #region POST YAPILIYOR\r\n                    client.Headers.Add(HttpRequestHeader.ContentType, &quot;application\/json&quot;);\r\n                    var JSONData = new { SoruID = 5, CevapID = 36 };\r\n                    var dataString = JsonConvert.SerializeObject(JSONData);\r\n                    string result = client.UploadString(&quot;http:\/\/www.lisanca.net\/Anket\/AnketOyla&quot;, &quot;POST&quot;, dataString);\r\n                    #endregion\r\n                    #region POST NET\u0130CES\u0130NDE \u00c7IKTI ALINIYOR\r\n                    MessageBox.Show(result);\r\n                    #endregion\r\n                }\r\n                catch\r\n                {\r\n\r\n                }\r\n            }\r\n        }\r\n<\/pre>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/h2V6bZI3Bfg\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>Bu makalede ele ald\u0131\u011f\u0131m\u0131z teknik \u00fczerine bundan sonraki botlar\u0131m\u0131zda bir tek kaynak kod \u00fczerinde de\u011fil server \u00fczerinde de i\u015flemler ger\u00e7ekle\u015ftirebilece\u011fiz ve bu i\u015flem neticesinde elde edilen sonu\u00e7lar \u00fczerinde de \u00e7al\u0131\u015fmalar\u0131m\u0131z\u0131 icra edebilece\u011fiz.<\/p>\n<p>Tabi ki de bu \u00e7al\u0131\u015fmalar askerden sonraya kalm\u0131\u015f bulunmakta \ud83d\ude42<br \/>\n5 ay 5 g\u00fcn sonra g\u00f6r\u00fc\u015fmek \u00fczere in\u015fallah&#8230;<\/p>\n<p>\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Biliyorsunuz ki, ben deniz bot yaz\u0131l\u0131mlar\u0131 \u00fczerinde \u00e7al\u0131\u015fmakta ve bu konuda bir\u00e7ok projeye imza atm\u0131\u015f bulunmaktay\u0131m. Haliyle yapm\u0131\u015f oldu\u011fum \u00e7al\u0131\u015fmalar s\u0131ras\u0131nda elde etti\u011fim t\u00fcm tecr\u00fcbe ve bilgiyi sizlere payla\u015fmakta ve bot yaz\u0131l\u0131mlar\u0131nda i\u015fe&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[228,27,1986,1987,1990,1991,1992,1985,1984,783,1989,1988,1983,1993],"class_list":["post-6909","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","tag-anonymous-type","tag-c","tag-c-bot","tag-c-bot-webclient","tag-c-ile-ajax-post-islemi","tag-c-ile-programatik-post","tag-c-kod-ile-post-etme","tag-c-webclient","tag-c-webclient-nesnesi","tag-webclient","tag-webclient-ile-json-okuma","tag-webclient-ile-post-islemi","tag-webclient-nesnesi","tag-webclient-post"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/6909","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=6909"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/6909\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3223"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=6909"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=6909"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=6909"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}