Сегодня поговорим о запросах POST и GET. Скажу сразу в этом в свое время мне помогла какая-то статья из Интернета, так что на полную самописность кода я не претендую. =)
Думаю не стоит объяснять зачем нужно посылать запросы из своего приложения, причин может быть много, но главной пожалуй является дополнительная возможность защитить свое приложение от взлома и кряков, ведь взломать сервер куда более сложней, чем приложение.
Не будем тянуть время и перейдем к сути вопроса: «Как же отправить GET или POST запрос в C#».
Отправка POST запроса
private static string POST(string Url, string Data) { System.Net.WebRequest req = System.Net.WebRequest.Create(Url); req.Method = "POST"; req.Timeout = 100000; req.ContentType = "application/x-www-form-urlencoded"; byte[] sentData = Encoding.GetEncoding(1251).GetBytes(Data); req.ContentLength = sentData.Length; System.IO.Stream sendStream = req.GetRequestStream(); sendStream.Write(sentData, 0, sentData.Length); sendStream.Close(); System.Net.WebResponse res = req.GetResponse(); System.IO.Stream ReceiveStream = res.GetResponseStream(); System.IO.StreamReader sr = new System.IO.StreamReader(ReceiveStream, Encoding.UTF8); //Кодировка указывается в зависимости от кодировки ответа сервера Char[] read = new Char[256]; int count = sr.Read(read, 0, 256); string Out = String.Empty; while (count > 0) { String str = new String(read, 0, count); Out += str; count = sr.Read(read, 0, 256); } return Out; }
Отправка GET запроса
private static string GET(string Url, string Data) { System.Net.WebRequest req = System.Net.WebRequest.Create(Url + "?" + Data); System.Net.WebResponse resp = req.GetResponse(); System.IO.Stream stream = resp.GetResponseStream(); System.IO.StreamReader sr = new System.IO.StreamReader(stream); string Out = sr.ReadToEnd(); sr.Close(); return Out; }
Так же не плохо было бы заключить весь код в try {} catch {} finally {} блоки. Это позволит более корректно получать данные и обрабатывать их в случае возникновения проблем с сетью.
Пример:
Пусть есть адрес http://site.ru/ который принимает POST параметры fname и lname и выводит их на экран (сначала lname потом fname). А так же принимает GET параметр age и так же выводит его. Тогда:
string Answer = POST("http://site.ru/", "fname=Andrey&lname=Mamatov"); //Answer = Mamatov Andrey Answer = GET("http://site.ru/", "age=123"); //Answer = 123