Работаем с HttpWebRequest и HttpWebResponse

Июнь 4th, 2011 § 1 comment

Мне нравится и часто приходится работать с сетью, в 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();

Опять таки как видите ничего сложного, по мере того как я больше буду работать я буду больше расширять эту статью либо розобью её же на несколько частей.

§ One Response to Работаем с HttpWebRequest и HttpWebResponse

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Смотреть фильмы онлайн