понедельник, 2 июля 2012 г.

C# Реализация Get/Post запросов

Это относится к работе с сетью, без отправки и получения запросов у нас ничего через интернет работать не может.

Есть уже готовые классы в стандартных библиотеках .NET, но всё равно писать приходится много. Рассмотрим на примере как делать Get запрос (получение данных по url):

public string GET_http(string url){
            System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
            System.Net.WebRequest reqGET = System.Net.WebRequest.Create(url);
            System.Net.WebResponse resp = reqGET.GetResponse();
            System.IO.Stream stream = resp.GetResponseStream();
            System.IO.StreamReader sr = new System.IO.StreamReader(stream);
            string html = sr.ReadToEnd();
            return html;
        }

Это была простая функция, которая требует для вызова url и в результате работы отдаёт нам html загруженной страницы.

Рассмотрим POST запрос. Для начала следует сказать, что этот запрос подразумевает отправку каких либо данных сначала, а потом только получение ответа. Самым частым случаем является авторизация на сайтах через http и дальнейшая работа в этом направлении.

Пример функции, которая отправляет POST запрос (отправка данных):
public string http_post(string url, string data)
        {
            var cookies = new CookieContainer();
            ServicePointManager.Expect100Continue = false;

            var request = (HttpWebRequest)WebRequest.Create(url);
            request.CookieContainer = cookies;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            using (var requestStream = request.GetRequestStream())
            using (var writer = new StreamWriter(requestStream))
            {
                writer.Write(data);
            }

            using (var responseStream = request.GetResponse().GetResponseStream())
            using (var reader = new StreamReader(responseStream))
            {
                var result = reader.ReadToEnd();
                return result;
            }
        }

В нашем случае переменная data это то, что передаётся в post запросе. Точно также как и с get, мы получаем ответ в виде html страницы. 
Чтобы лучше разобраться что это такое, покажу на примере как правильно делать вызов данной функции:
private void button1_Click(object sender, EventArgs e)
        {         
            http_post("http://m.vk.com/","email=goga@mail.ru&pass=123");  
        }

Та функция, которую я показал, не делает авторизацию на сайт контакта, результат будет отрицательным, так как для контакта совсем иная история и url для запроса должен быть другой. Но запрос будет отправлен, всё это работает.

0 коммент.:

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

TROCKII БЛОГ Copyright © 2012 | Template created by Lev Trockii |