Хотите прямо сейчас получить бесплатный видеокурс по программированию для начинающих?

C# POST и GET запросы на сервер

Сентябрь 27, 2013

cs_getpage

В одной из предыдущих статей, мы уже говорили, о том как заполнять формы на сайтах и отправлять их, но это не очень эффективно и подавляющем большинстве случаев программисты отправляют запросы на сервер, указывая необходимые параметры. Сейчас рассмотрим 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 в запросе мы так же указываем заголовки запроса, как бы это сделал браузер. Запросы — штука хорошая и широко применяемая, но занимает достаточно много времени на выполнение, поэтому когда запросов у вас много, удобнее и эффективнее выполнять их в отдельных потоках. В стандартном классе есть методы для асинхронного выполнения запросов, о них мы поговорим в следующих статьях.



3 Комментариев к записи C# POST и GET запросы на сервер

  1. Ruzarh on 30.09.2013 at 15:10

    Ну для начала, а что если мне надо передать сразу и GET, и POST параметры? Именование функций просто идеальное. Что оно делает: передает; получает; пережевывает; обрабатывает; А если я хочу отправить аякс запрос? Например ограничения на длину строки в GET запросе?

    Я вот считаю что самое важное тут это «Именование функций». И понимание для чего это надо.

    • Владислав on 18.01.2014 at 14:35

      Ну для начала, а что если мне надо передать сразу и GET, и POST параметры?
      Тут передача с параметром идёт, Data, это данные передающиеся Out ответ сервера.
      Вы явно не разбираетесь в коде

    • vitar on 13.12.2014 at 10:37

      Я конечно не «Гуру», но спрошу у Вас, как должен реагировать серверный скрипт на GET, и POST запрос в одном флаконе? Да и серверу побоку «Аякс» технологию Вы используете или что ещё. И зачем Вам ДжаваСкрипт если у Вас есть C#?

Добавить комментарий

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

Поддержите проект

Хит продаж:

Случайный анекдот

Моя вторая книга

Что это???

Программирование для Android:

Мы вконтакте

Помощь сайту

Понравился сайт? Он сильно нуждается в раскрутке.

Чтобы помочь в раскрутке - опубликуйте ссылку на сайт (или любую его страницу) на любом другом сайте в интернете. Тогда сайт станет чуточку популярнее.

Или просто нажмите на кнопки социальных сетей которые стоят в конце каждой статьи

Вместе мы сможем сделать программирование более популярным и более понятным для всех!

Заранее спасибо!
Артём Кашеваров.