Отправка POST-запроса на C# и получение ответа от сервера


Сейчас подавляющее большинство сайтов в интернете обладают формой обратной связи – удобная штука, дающая возможность оставить комментарий к статье, причем сделать это без регистрации. Прочитал – что-то захотел добавить – написал – отправил. Схема простая до невозможности, но иногда хочется что-то и усложнить. Или изучить на конкретном примере. В частности, в данной статье мы рассмотрим возможность отправки такой формы без захода на сайт. Для этого нам понадобится:

  • Microsoft Visual C# - 1 штука,
  • сайт с формой обратной связи – 1 штука.
Еще необходима будет голова и не самые кривые руки, но, надеюсь, это имеется по умолчанию. Итак, запускаем наш Microsoft Visual C# (я пользуюсь версией 2010 – она, по моему мнению, наименее глючная, если накатить обновление – сервис пак первый; но код пойдет и на других студиях, включая последние 2013-2015), выбираем «Файл» - «Создать проект» - «Консольное приложение C#» и набираем (или копируем) такой код.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Collections.Specialized;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://upread.ru/save.php";
            using (var webClient = new WebClient())
            {
                var pars = new NameValueCollection();
                pars.Add("fname", "текст сообщения");
                var response = webClient.UploadValues(url, pars);
                string str = System.Text.Encoding.UTF8.GetString(response);
                Console.WriteLine(str);
                Console.ReadKey();
            }
        }
    }
}
Разберем получившуюся программку построчно. Строки 1-6 – это подключение библиотек и пространства имен, здесь нет ничего интересного. В строке 14 мы определяем переменную url, как несложно догадаться, в ней и задается адрес, на который посылается POST-запрос. Стоит обратить внимание, что здесь ставится адрес именно той страницы, которая принимает запрос, а не с которой он отправляется. Самый простой способ узнать, какая страница на сайте его принимает и обрабатывает – это посмотреть её исходный код. В исходном коде находим такую строку

<FORM  ACTION="save.php" method = "post">
Параметр «ACTION» и определяет адрес, на который посылаются данные. В рассматриваемом примере я использую страницу своего сайта «save.php». Эта страница принимает сообщения, которые посетители отправляют со страниц с рецензиями на книги или фильмы.

В строке 17 создается коллекция параметров. А следующая строка добавляет параметры. Здесь первый параметр – это идентификатор, а второй – значение, которое надо отправить. В нашем случае идентификатор – это имя textarea; узнать его можно, если найти в исходном коде страницы строку

«textarea name="fname"»
Строка 19 отправляет параметры на сервер. Фактически, уже после этой строки произошло соединение с удаленным сервером и сообщение полетело. Куда-то полетело, в общем. Но нам же интересно узнать, как отреагировал сервер, правда? Именно ответ сервера и выводит в консоль строка 21. А строка 22 требуется для того, чтобы вы успели прочитать ответ. Здесь особое внимание стоит обратить на строку 20 – в ней происходит преобразование массива байт в строку. В данном конкретном примере мы используем «Encoding.UTF8» - так как кодировка моего сайта UTF8. Существуют и другие параметры кодирования для метода GetString: Encoding.ASCII, Encoding.Unicode, Encoding.UTF7, Encoding.Default (для ANSI) ну и так далее.

В примере вы получите текст страницы – её исходный код.C# добросовестно соединится и выведет его на консоль. Вот, собственно и все: мы решили задачу. Задача, напомню, заключалась в том, чтобы средствами C# отправить POST-запрос и получить ответ.

Напоследок стоит заметить, что таких сайтов, которые позволяют просто отправлять комментарии или сообщения без предварительной обработки мало, и их становится все меньше. Сейчас все большее распространение получают капчи, причем. Общая схема отправки комментария на страницу с капчей такая: создаем соединение - >получаем страницу -> обрабатываем капчу -> извлекаем из неё данные (цифры, буквы) -> отправляем запрос. Обработка каждой конкретной капчи – это не самая тривиальная задача, для её решения используются довольно сложные методы, например, применяются нейронные сети. Но это уже тема для другой статьи.

Если вам требуется какая-либо помощь по языку C#, необходима программа на нем, то я вам с удовольствием помогу, правда, не совсем безвозмездно. Пишите up777up@yandex.ru: создание программ на заказ - как под Windows, так и под другие операционные системы - на Java. Кроме этого, если материал данной статьи был вам полезен, то вы можете оказать небольшую материальную помощь автору - поверьте, он будет благодарен любой сумме.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, си шарп, POST-запрос




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Домашнее шампанское
Урок 35. Стрелочные функции или функции-стрелки в JavaScript
Печать dataGridView из C++/CLI в Visual Studio