C# POST и GET запросы на сервер
В одной из предыдущих статей, мы уже говорили, о том как заполнять формы на сайтах и отправлять их, но это не очень эффективно и подавляющем большинстве случаев программисты отправляют запросы на сервер, указывая необходимые параметры. Сейчас рассмотрим 2 функции, которые будут отправлять запросы, на переданный в параметре адрес и свойства. Мы будем использовать классы для работы с запросами и чтением ответов, поэтому нам необходимо импортировать следующие пространства имен:
using System.Net;
using System.IO;
Следующим образом у нас будет выглядеть функция для отправки GET запроса и получения ответа от сервера в строковую переменную.
private string GET(string Url, string Data) { WebRequest req = WebRequest.Create(Url + "?" + Data); WebResponse resp = req.GetResponse(); Stream stream = resp.GetResponseStream(); StreamReader sr = new StreamReader(stream); string Out = sr.ReadToEnd(); sr.Close(); return Out; } |
Как мы видим наша функция GET принимает 2 параметра Url — это адрес на которой запрос отправляется и Data, это параметры запроса. К примеру нам надо отправить запрос mysite.ru/login.php?name=Vasya&password=123 тогда в Url мы передадим mysite.ru/login.php а в качестве Data передадим name=Vasya&password=123 В результате функция нам вернет код страницы, который передал сайт после обращения к нему.
С POST запросами ситуация идентичная, но чуточку сложнее.
private string POST(string Url, string Data) { WebRequest req = 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; Stream sendStream = req.GetRequestStream(); sendStream.Write(sentData, 0, sentData.Length); sendStream.Close(); WebResponse res = req.GetResponse(); Stream ReceiveStream = res.GetResponseStream(); StreamReader sr = new 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; } |
В этой функции все те же параметры и все тот же тип возвращаемого значения, но помимо Url в запросе мы так же указываем заголовки запроса, как бы это сделал браузер. Запросы — штука хорошая и широко применяемая, но занимает достаточно много времени на выполнение, поэтому когда запросов у вас много, удобнее и эффективнее выполнять их в отдельных потоках. В стандартном классе есть методы для асинхронного выполнения запросов, о них мы поговорим в следующих статьях.
Понравилась статья? Жми: | Поделиться в соц. сетях |
Ну для начала, а что если мне надо передать сразу и GET, и POST параметры? Именование функций просто идеальное. Что оно делает: передает; получает; пережевывает; обрабатывает; А если я хочу отправить аякс запрос? Например ограничения на длину строки в GET запросе?
Я вот считаю что самое важное тут это «Именование функций». И понимание для чего это надо.
Ну для начала, а что если мне надо передать сразу и GET, и POST параметры?
Тут передача с параметром идёт, Data, это данные передающиеся Out ответ сервера.
Вы явно не разбираетесь в коде
Я конечно не «Гуру», но спрошу у Вас, как должен реагировать серверный скрипт на GET, и POST запрос в одном флаконе? Да и серверу побоку «Аякс» технологию Вы используете или что ещё. И зачем Вам ДжаваСкрипт если у Вас есть C#?