Запросы методом POST, отправка данных на сервер — КиберПедия 

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Запросы методом POST, отправка данных на сервер

2017-07-25 326
Запросы методом POST, отправка данных на сервер 0.00 из 5.00 0 оценок
Заказать работу

Если куки это данные небольших размеров, и передавать их серверу нормально в виде заголовка запросом GET, то данные размеров побольше отправляются при помощи метода POST.

Данные которые обычно отправляются на сервер это, например, логин и пароль при аутентификации, текст комментария, картинка или другой файл и т.д.

А теперь я покажу вам, как делать самый простой POST запрос. Специально для этого урока я создал страничку на сайте, на которой есть форма отправки данных - тектовое поле и кнопка, вы вводите текст, отправляете на сервер, и тот возвращает его в верхнем регистре.

Запускаем Fiddler, делаем на этой страничке отправку данных, и смотрим какой запрос у нас получился. Первое что мы видим, это то, что метод HTTP-запроса уже POST:

POST http://mycsharp.ru/lesson_post.aspx HTTP/1.1

 

А также появилось тело запроса - всё что отделено от заголовков пустой строкой:

__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTEzNDY
2NDcwOTEPZBYCZg9kFgICAw9kFgQCAw8P
FgIeB1Zpc2libGVoZGQCBQ8PFgIfAGhkZBgCBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3R
CYWNrS2V5X18WAwUjY3RsMDAkTG9naW5WaWV3MSRMb2dpblN0YXR1czIkY3RsM
RDEFI2N0bDAwJExvZ2luVmlldzEkTG9naW5TdGF0dXMyJGN0bDAzBRZjdGwwMCRC
dXR0b25BZGRNZXNzYWdlBRBjdGwwMCRMb2dpblZpZXcxDw9kAgFklPjrncDGuwrKW
9f9BwjvWEd1XX4%3D&__VIEWSTATEGENERATOR=B8D7EBDC&__EVENTVALIDAT
ION=%2FwEdAAaH57zUq1EcgzGHRmNTrPx7g8CfUEZ4x6JEFru5
nuWdjCW%2BqOYM8KaSMijlDwu7G%2FLcsSnZ18juQMuHSVUa%2FyIvHzTcyUMF0
BNvM9WAdwxerE6E1mG5ttYwRKM8%2FHd5iYqdyvbUyTUDQtBYcvYy5Rw1v9nQ
2g%3D%3D&ctl00%24C
ontentPlaceHolder1%24Text=mycsharp_ru&ctl00%24ContentPlaceHolder1%24B
uttonTextToUpper=%D0%9E%D1%82%D0
%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C&ctl00%24email=
%D1%82%D0%B2%D0%BE%D0%B9+e-mail

 

Это данные, которые отправляются на сервер. Они здесь в формате ключ-значение, и разделяются символом "&". Там же мы видим данные, которые передаются с текстового поля: ctl00%24ContentPlaceHolder1%24Text=mycsharp_ru.

А теперь сделаем такой запрос программно:

public static void Main (string[] args)
{
string uri = "http://mycsharp.ru/lesson_post.aspx";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

// данные для отправки, здесь я изменил значение тектового поля на "http_post"
string postData = "__VIEWSTATE=%2FwEPDwULLTEzNDY
2NDcwOTEPZBYCZg9kFgICAw9kFgQCAw8P
FgIeB1Zpc2libGVoZGQCBQ8PFgIfAGhkZBgCBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3R
CYWNrS2V5X18WAwUjY3RsMDAkTG9naW5WaWV3MSRMb2dpblN0YXR1czIkY3RsM
RDEFI2N0bDAwJExvZ2luVmlldzEkTG9naW5TdGF0dXMyJGN0bDAzBRZjdGwwMCRC
dXR0b25BZGRNZXNzYWdlBRBjdGwwMCRMb2dpblZpZXcxDw9kAgFklPjrncDGuwrKW
9f9BwjvWEd1XX4%3D&__VIEWSTATEGENERATOR=B8D7EBDC&__EVENTVALIDAT
ION=%2FwEdAAaH57zUq1EcgzGHRmNTrPx7g8CfUEZ4x6JEFru5
nuWdjCW%2BqOYM8KaSMijlDwu7G%2FLcsSnZ18juQMuHSVUa%2FyIvHzTcyUMF0
BNvM9WAdwxerE6E1mG5ttYwRKM8%2FHd5iYqdyvbUyTUDQtBYcvYy5Rw1v9nQ
2g%3D%3D&ctl00%24C
ontentPlaceHolder1%24Text=http_post&ctl00%24ContentPlaceHolder1%24B
uttonTextToUpper=%D0%9E%D1%82%D0
%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C&ctl00%24email=
%D1%82%D0%B2%D0%BE%D0%B9+e-mail";

// конвертируем строку в массив байтов
byte[] data = Encoding.UTF8.GetBytes(postData);
// указываем метод запроса POST
request.Method = "POST";
// для POST запроса необходимо указать тип передаваемых данных и размер
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
// записываем в поток запроса данные
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

Console.WriteLine(reader.ReadToEnd()); // получаем ответ от сервера - страничка с текстом "HTTP_POST"
reader.Close ();
Console.ReadLine();
}

 

Здесь всё просто, подготавливаем данные для отправки - переводим их в массив байтов и записываем в поток запроса. Указываем заголовки тип данных, размер данных, указываем что метод запроса POST, и собственно, делаем запрос. Если бы нужно было быть авторизованным, чтобы отправлять данные с этой формы, нужно было бы еще куки добавить в запрос. И еще скажу, что часто сайты требуют чтобы был установлен заголовок UserAgent, иначе не обрабатывают запрос, не важно GET/POST он или другой.

Домашнее задание

Попробуйте добавить комментарий к этому уроку программно, текст комментария - "I did it!". Только попрошу сильно не увлекаться, за спам накажу:) За первые комментарии, которые будут для того, чтобы проанализировать данные запроса не беспокойтесь, буду их подчищать, и пусть текст этого комментария будет "For test". И делайте дз от имени своего пользователя, а не test1111. Успехов!

 


Поделиться с друзьями:

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.007 с.