Мне нравится и часто приходится работать с сетью, в C# встроено для этого очень много фич, но сегодня мы погорим про работу с протоколом HTTP. Чаще всего для этих целей в C# используются HttWebRequest и HttpWebResponse. На эту тему есть хорошая стать на RSDN вот тут . Я понятное дело не претендую на полноту изложения как в этой статье, но все же кину свои 5 копеек.
Начнем с самого просто, как отправить запрос для этого нам нужно всего не много кода
//Здесь мы задаем ресурс к какому хотим подключится, заметим что метод //Create возвращает класс WebRequest, от которого и наследуется HttpWebRequest HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("http://redgears.ru/"); //Собственно webRequest.GetResponse() и выполняет сам запрос непосредственно //но нам нужно его еще прочитать, для этого нам нужен HttpWebResponse //webRequest.GetResponse() возвращает нам класс WebResponse от которого наследуется //HttpWebResponse, поэтому мы используем оператор приведения. HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); //Теперь мы выполнили запрос нам нужно прочитать данные и для этого используем StreamReader StreamReader reader = new StreamReader(webResponse.GetResponseStream()); String data = reader.ReadToEnd();
Вот так ничего сложного как видите. Ну чтож отправлять GET запросы мы научились перейдем к POST запросам, с ними также ничего сложного, чуток мороки побольше. Ну начнем.
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("http://redgears.ru); //Указываем что хотим передать POST запрос webRequest.Method = "POST"; //Указываем тип контента который хотим передать webRequest.ContentType = "application/x-www-form-urlencoded"; //Тут у нас происходит, мы с начала формируем сам POST запрос, далее преобразовываем его //в массив типа byte, задаем размер передаваемого контента string post_data = String.Format("id={0}&news={1}", 1, "Hello my dear POST"); byte[] byteArr = Encoding.GetEncoding("UTF-8").GetBytes(post_data); webRequest.ContentLength = byteArr.Length; //Тут может возникнуть маленькое не понимание как у меня было в начале, //мы получаем поток webRequest'а пишем в него данные после этого его закрываем. Stream stream = webRequest.GetRequestStream(); stream.Write(byteArr, 0, byteArr.Length); stream.Close(); //Дальше все также как с первым примером, единственное что я не создаю явно //StreamReader а создаю экземпляр лишь с целю вызвать метод ReadToEnd() //у нас есть GC без него мы бы так не смогли пошалить это бы привел к утечке //памяти как в случае с C++ HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); String data = new StreamReader(webResponse.GetResponseStream()).ReadToEnd();
Опять таки как видите ничего сложного, по мере того как я больше буду работать я буду больше расширять эту статью либо розобью её же на несколько частей.
Благодарю, статья пригодилась =)