C# — Обработка Post запроса на c#


Содержание

Протокол HTTP

HTTP — это упрощенный протокол прикладного уровня, который размещается поверх TCP и в основном известен как транспортный канал для World Wide Web и локальных интрасетей. Однако это классический протокол, который используется помимо гипертекста для многих других задач, например, в серверах доменных имен и системах распределенного управления объектами посредством своих методов запросов, кодов ошибок и заголовков. Сообщение HTTP представляется в MIME-подобном формате; оно содержит метаданные о сообщении (например, тип его содержания и длину) и информацию о запросе и ответе, например, метод, используемый для отправки запроса.

Существуют два основных компонента, от которых зависит Web: сетевой протокол TCP/IP и HTTP. Почти все события в Web происходят через HTTP, и этот протокол преимущественно используется для обмена документами (такими, как Web-страницы) в World Wide Web.

HTTP — это протокол приложения клиент-сервер, через который взаимодействуют две системы, обычно использующие соединение TCP/IP. HTTP-сервер — это программа, слушающая на порте машины входящие HTTP-запросы.

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

В сообщение может входить любое число заголовков, и каждый из них располагается на отдельной строке (т.е. каждому заголовку предшествуют символы возврата каретки и перевода строки). Тело сообщения присутствует необязательно, но если оно имеется, то отделяется от заголовков двумя последовательностями CRLF.

В протоколе HTTP используются постоянные и непостоянные соединения. Непостоянные соединения применяются по умолчанию в версии 1.0 HTTP, в то время как постоянные соединения

в версии HTTP 1.1. Соединение называют , если любое TCP-соединение закрывается сразу же, как только сервер отправляет клиенту требуемый объект. Это означает, что соединение используется только для одного запроса и одного ответа и не сохраняется для других запросов и ответов.

В случае постоянных соединений сервер, отправив ответ, оставляет соединение открытым, и, таким образом, следующие запросы и ответы между теми же клиентом и сервером могут отправляться через это же самое соединение. Такое соединение сервер закрывает лишь после того, как оно не используется в течение некоторого интервала времени.

HTTP-заголовки

HTTP-сообщение состоит из начальной строки, за которой следуют набор заголовков, пустая строка и некоторые данные. Начальная строка задает действие, требуемое от сервера, тип возвращаемых данных или код состояния.

HTTP-заголовки можно подразделить на три крупные категории: заголовки, посылаемые в запросе, заголовки, посылаемые в ответе, и те, которые можно включать как в запросы, так и в ответы. Заголовки запросов указывают возможности клиента, например, типы документов, которые может обработать клиент, в то время как заголовки ответов предоставляют информацию о возвращенном документе.

Заголовки запросов

К числу наиболее важных HTTP-заголовков, которые можно включать в запросы, но нельзя включать в ответы, относятся:

Заголовок Accept

Это список MIME-типов, принимаемых клиентом, в формате тип/подтип. Элементы списка должны разделяться запятыми:

Элемент */* указывает, что все типы будут приняты и обработаны клиентом. Если тип запрошенного файла не может быть обработан клиентом, возвращается ошибка HTTP 406 «Not acceptable» (недопустимо).

Заголовок From

Указывает адрес электронной почты в Интернете учетной записи пользователя, под которой работает клиент, направивший запрос:

Позволяет клиенту указать адрес (URI) ресурса, из которого получен запрашиваемый URI. Этот заголовок дает возможность серверу сгенерировать список обратных ссылок на ресурсы для будущего анализа, регистрации, оптимизированного кэширования и т.д. Он также позволяет прослеживать с целью последующего исправления устаревшие или введенные с ошибками ссылки:

Представляет собой строку, идентифицирующую приложение-клиент (обычно браузер) и платформу, на которой оно выполняется. Общий формат имеет вид: программа/версия библиотека/версий, но это не неизменный формат:

Эта информация может использоваться в статистических целях, для отслеживания нарушений протокола и для автоматического распознавания клиента. Она позволяет приспособить ответ так, чтобы не нарушить ограниченные возможности конкретного клиента, например неспособность поддерживать HTML-таблицы.

Заголовки ответов

В ответы могут включаться следующие заголовки:

Заголовок Content-Type

Используется для указания типа данных, отправляемых получателю или, в случае метода HEAD, тип данных, который был бы отправлен в ответ на запрос GET:

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

Определяет точное расположение другого ресурса, к которому может быть перенаправлен клиент. Если это значение представляет собой полный URL, сервер возвращает клиенту «redirect» для непосредственного извлечения указанного объекта:

Если ссылка на другой файл относится к серверу, должен указываться частичный URL.

Заголовок Server

Содержит информацию о программном обеспечении, используемом исходным сервером для обработки запроса:

Общие заголовки

Несколько заголовков могут включаться как в запрос, так и в ответ, например:

Заголовок Date

Используется для установки даты и времени создания сообщения:

В НТТР/1.0 мы могли использовать в запросе заголовок Connection, указывая, что хотим сохранить соединение после отправки ответа. Теперь такое поведение принято по умолчанию, и в HTTP/1.1 можно использовать заголовок Connection, чтобы указать, что постоянное соединение не нужно:

HTTP-запросы

Каждый клиент посылает запрос, и сервер на него отвечает. Все запросы и ответы состоят из трех частей, а именно: строки запроса или ответа, секции заголовков и тела сущности (любого содержания, отправляемого вместе с сообщением, например, страницы HTML для отображения в браузере или данных формы, пересылаемых на сервер).

Клиент связывается с сервером в назначенном номере порта (по умолчанию равном 80) и запрашивает у сервера документ, задавая HTTP-команду, называемую методом, за которой следует адрес документа и номер версии HTTP. Клиент также отправляет серверу необязательную информацию в заголовках, чтобы сообщить серверу о своей конфигурации и приемлемых для него форматах документов. Информация заголовка дается в одной строке вместе с именем и значением заголовка. После заголовков клиент посылает пустую строку. Затем клиент отправляет дополнительные данные. Это могут быть данные формы, отправляемые на сервер методом POST, или файл, копируемый на сервер методом PUT.

Запросы клиентов подразделяются на три секции. Первая строка сообщения всегда должна содержать HTTP-команду, называемую методом, за которой следует URI, идентифицирующий файл или ресурс, запрашиваемый клиентом, и номер версии HTTP:

Теперь исследуем каждую из этих секций. Метод — это HTTP-команда, начинающая первую строку запроса клиента. Метод информирует сервер о цели запроса клиента. Для HTTP определены семь методов: GET, HEAD, POST, OPTIONS, PUT, DELETE и TRACE, но HTTP-серверы могут также реализовать методы расширения, не определенные протоколом HTTP. Заметим, что названия методов зависят от регистра клавиатуры, поэтому, например, слово get не будет распознано как допустимый метод.

Метод GET используется для запроса информации, расположение которой на сервере определяется заданным URI. Этот метод широко применяется браузерами, чтобы извлекать документы для просмотра. Результат запроса GET генерируется разными способами. Это может быть файл, доступный с сервера, вывод программы, вывод, полученный на устройстве, и т. д.

Когда клиент в своем запросе использует метод GET, сервер отправляет ответ, содержащий строку состояния, заголовки и метаданные. Если сервер не может обработать запрос из-за ошибки или отсутствия авторизации, он отправляет объяснение в текстовом виде, помещая его в ответе в секцию данных.

Секция тела о сути запроса GET всегда остается пустой. Запрошенный клиентом ресурс (файл или программа) идентифицируется по его полному пути на сервере. Любая дополнительная информация, например, значения из формы, которую клиенту нужно отправить серверу, присоединяется вслед за URI как строка запроса:

Метод HEAD функционально аналогичен методу GET, не считая того, что сервер ничего не помещает в секцию данных ответа. Методом HEAD запрашивается только заголовочная информация по файлу или ресурсу. Для запроса HEAD HTTP-сервер должен отправить в заголовках ту же информацию, которую он бы отправил в ответ на запрос GET. Данный метод используется, если клиенту нужна информация о документе, но не нужно получать сам документ.

Цукерберг рекомендует:  Простая математическая игра

Метод POST позволяет отправить данные серверу в клиентском запросе. Эти данные посылаются программе обработки данных, к которой у сервера есть доступ. Метод POST может использоваться для многих приложений, например, для обеспечения входных данных сетевых служб, программ интерфейса командной строки и т.д. Данные отправляются на сервер в секции тела сути клиентского запроса. Обработав запрос POST и заголовки, сервер передает это тело программе, указанной в URI.

В методе OPTIONS запрашивается информация о поддержке HTTP на Web-cepвeре. Метод OPTIONS может применяться с URL, чтобы извлечь информацию о конкретном документе или, с групповым символом *, чтобы получить информацию о возможностях сервера в целом. Информация возвращается в заголовках ответа.

HTTP-ответы

Ответ сервера на запрос клиента также подразделяется на три части. Первая строка—это строка ответа сервера, содержащая номер версии HTTP, номер, указывающий состояние запроса, и краткую фразу, описывающую это состояние. Далее следует информация заголовков, за ней — пустая строка и тело сущности (которое может быть пустым, например, в ответах на запросы HEAD и OPTIONS).

В качестве версии HTTP указывается та версия, которую сервер использует в ответе. Код состояния представляет собой трехбайтовое число, указывающее результат обработки сервером запроса клиента. Описание, следующее за кодом состояния, просто дает удобное для восприятия пользователем значение кода состояния. Хотя существует несколько определенных кодов состояния, сервер вправе устанавливать дополнительные коды. Некоторые наиболее распространенные определенные коды приводятся в следующей таблице:

Коды состояния запроса HTTP

Код Описание
200 ОК — запрос был получен и обработан
301 Ресурс перемещен постоянно
302 Ресурс перемещен временно
400 Неверный запрос—сообщение с запросом имеет некорректный формат
401 Несанкционированный доступ — у пользователя нет прав для доступа к запрошенному документу.
402 Ресурс доступен за плату
408 Тайм-аут запроса
500 Внутренняя ошибка сервера—ошибка помешала HTTP-серверу обработать запрос

После строки состояния сервер отправляет клиенту в заголовках информацию о себе и запрошенном документе. Заголовки завершаются пустой строкой (т.е. двумя идущими подряд последовательностями CRLF).

Если клиент запрашивал данные и запрос обработан успешно, эти данные будут отправлены в теле сущности после заголовков ответа. Они могут представлять собой копию запрошенного файла или содержание, сгенерированное динамически, например страницу ASP.NET или сценарий на стороне сервера. Если запрос клиента не выполнен, могут быть предоставлены дополнительные данные объясняющие, почему сервер не смог выполнить этот запрос.

В HTTP 1.0 сервер, завершив отправку запрошенных данных, отсоединяется от клиента и транзакция на этом заканчивается, если только не был отправлен заголовок Connection: Keep-Alive. Однако в HTTP 1.1 сервер должен поддерживать соединение, позволяя клиенту делать дополнительные запросы, даже если заголовок Connection не был отправлен. Если не нужно такое поведение, следует отправить заголовок Connection: close, который указывает, что после отправки ответа соединение должно быть закрыто.

Отправка GET и POST запросов в C#

Программирование › Отправка GET и POST запросов в C#

В этой теме 0 ответов, 1 участник, последнее обновление Васильев Владимир Сергеевич 2 мес. назад.

Отправка GET-запросов в C#

Здесь все просто — создаем новый объект WebRequest, в конструктор которого передаем URL-адрес нужной страницы, получаем ответ методом GetResponse(). Читаем поток ответа сервера и делаем с ним что душе угодно.

Отправка POST-запросов в C#

Здесь немного сложнее. Перед отправкой данных необходимо объекту WebRequest задать ряд опций, определяющих метод запроса и тип содержимого. Затем необходимо закодировать отправляемые данные и записать их в поток запроса. После этого можно прочитать поток ответа.

Вызов веб-API из клиента .NET (C#) Call a Web API From a .NET Client (C#)

Этом руководстве показано, как вызывать веб-API из приложения .NET с помощью System.Net.Http.HttpClient. This tutorial shows how to call a web API from a .NET application, using System.Net.Http.HttpClient.

В этом руководстве клиентского приложения записываются, которые используют следующие веб-API: In this tutorial, a client app is written that consumes the following web API:

Действие Action Метод HTTP HTTP method Относительный URI Relative URI
Получить продукт по Идентификатору Get a product by ID GET GET /API/продукты/идентификатор /api/products/id
Создать продукт Create a new product ПОМЕСТИТЬ POST / api/продуктов /api/products
Обновления продукта Update a product PUT PUT /API/продукты/идентификатор /api/products/id
Удалить продукт Delete a product DELETE DELETE /API/продукты/идентификатор /api/products/id

Чтобы узнать, как реализовать этот интерфейс API с веб-API ASP.NET, см. в разделе Создание веб-API, поддерживает операции CRUD. To learn how to implement this API with ASP.NET Web API, see Creating a Web API that Supports CRUD Operations.

Для простоты клиентское приложение в этом руководстве используется консольное приложение Windows. For simplicity, the client application in this tutorial is a Windows console application. HttpClient также поддерживается для приложений Windows Phone и Windows Store. HttpClient is also supported for Windows Phone and Windows Store apps. Дополнительные сведения см. в разделе код записи веб-API клиента для нескольких платформ с помощью переносимых библиотек For more information, see Writing Web API Client Code for Multiple Platforms Using Portable Libraries

Создание консольного приложения Create the Console Application

В Visual Studio создайте новое консольное приложение Windows с именем HttpClientSample и вставьте в него следующий код: In Visual Studio, create a new Windows console app named HttpClientSample and paste in the following code:

Приведенный выше код является полный клиентским приложением. The preceding code is the complete client app.

RunAsync запуски и блокируется до его завершения. RunAsync runs and blocks until it completes. Большинство HttpClient методы являются async, поскольку они выполняют подсистемы ввода/вывода. Most HttpClient methods are async, because they perform network I/O. Все асинхронные задачи выполняемые в RunAsync . All of the async tasks are done inside RunAsync . Обычно приложения не блокирует основной поток, но это приложение не допускает каких-либо взаимодействий. Normally an app doesn’t block the main thread, but this app doesn’t allow any interaction.

Установка библиотеки Web API клиента Install the Web API Client Libraries

С помощью диспетчера пакетов NuGet для установки пакета Web API клиентских библиотек. Use NuGet Package Manager to install the Web API Client Libraries package.

В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet > Консоль диспетчера пакетов. From the Tools menu, select NuGet Package Manager > Package Manager Console. В консоли диспетчера пакетов (PMC), введите следующую команду: In the Package Manager Console (PMC), type the following command:

Предыдущая команда добавляет в проект следующие пакеты NuGet: The preceding command adds the following NuGet packages to the project:

  • Microsoft.AspNet.WebApi.Client Microsoft.AspNet.WebApi.Client
  • Newtonsoft.Json Newtonsoft.Json

Json.NET — это популярная платформа JSON высокой производительности для .NET. Json.NET is a popular high-performance JSON framework for .NET.

Добавление класса модели Add a Model Class

Проверьте класс Product : Examine the Product class:

Этот класс соответствует модели данных, используемых веб-API. This class matches the data model used by the web API. Приложение может использовать HttpClient для чтения Product экземпляр HTTP-ответа. An app can use HttpClient to read a Product instance from an HTTP response. Приложение не нужно писать код десериализации. The app doesn’t have to write any deserialization code.

Создание и инициализация HttpClient Create and Initialize HttpClient

Изучите статический HttpClient свойство: Examine the static HttpClient property:

HttpClient будет должен создаваться один раз и повторно использоваться на протяжении всего жизненного цикла приложения. HttpClient is intended to be instantiated once and reused throughout the life of an application. Можно привести следующие условия SocketException ошибок: The following conditions can result in SocketException errors:

  • Создание нового HttpClient экземпляра на запрос. Creating a new HttpClient instance per request.
  • Сервер в условиях большой нагрузки. Server under heavy load.

Создание нового HttpClient экземпляра на запрос может исчерпать все доступные сокеты. Creating a new HttpClient instance per request can exhaust the available sockets.


В следующем примере кода инициализирует HttpClient экземпляр: The following code initializes the HttpClient instance:

Предыдущий код: The preceding code:

  • Задает базовый URI для HTTP-запросов. Sets the base URI for HTTP requests. Измените номер порта к порту, используемому в серверное приложение. Change the port number to the port used in the server app. Если не используется порт для серверного приложения для работы приложения. The app won’t work unless port for the server app is used.
  • Задает заголовок Accept «application/json». Sets the Accept header to «application/json». Параметр этот заголовок указывает, что сервер для отправки данных в формате JSON. Setting this header tells the server to send data in JSON format.

Отправка запроса GET для извлечения ресурса Send a GET request to retrieve a resource

Следующий код отправляет запрос GET для продукта: The following code sends a GET request for a product:

GetAsync метод отправляет запрос HTTP GET. The GetAsync method sends the HTTP GET request. Если метод завершается, она возвращает HttpResponseMessage , содержащий HTTP-ответа. When the method completes, it returns an HttpResponseMessage that contains the HTTP response. Если код состояния в ответе код успешного выполнения, текст ответа содержит представление JSON продукта. If the status code in the response is a success code, the response body contains the JSON representation of a product. Вызовите ReadAsAsync для полезных данных JSON для десериализации Product экземпляра. Call ReadAsAsync to deserialize the JSON payload to a Product instance. ReadAsAsync метод является асинхронным, поскольку текст ответа может быть произвольно большим. The ReadAsAsync method is asynchronous because the response body can be arbitrarily large.

HttpClient не выдает исключение при HTTP-ответа содержит код ошибки. HttpClient does not throw an exception when the HTTP response contains an error code. Вместо этого IsSuccessStatusCode свойство false Если состояние — код ошибки. Instead, the IsSuccessStatusCode property is false if the status is an error code. Если вы предпочитаете обрабатывать коды ошибок HTTP как исключения, вызвать HttpResponseMessage.EnsureSuccessStatusCode объекта response. If you prefer to treat HTTP error codes as exceptions, call HttpResponseMessage.EnsureSuccessStatusCode on the response object. EnsureSuccessStatusCode создает исключение, если код состояния находится вне диапазона 200–299. EnsureSuccessStatusCode throws an exception if the status code falls outside the range 200–299. Обратите внимание, что HttpClient может создавать исключения по другим причинам — к примеру, если тайм-аута запроса. Note that HttpClient can throw exceptions for other reasons — for example, if the request times out.

Модули форматирования типа мультимедиа для десериализации Media-Type Formatters to Deserialize

Когда ReadAsAsync вызывается без параметров, он использует набор по умолчанию модули форматирования мультимедиа прочитать текст ответа. When ReadAsAsync is called with no parameters, it uses a default set of media formatters to read the response body. Модули форматирования по умолчанию поддерживает JSON, XML и данные в форме кодировке к URL-адрес. The default formatters support JSON, XML, and Form-url-encoded data.

Вместо того чтобы использовать модули форматирования по умолчанию, можно предоставить список модулей форматирования для ReadAsAsync метод. Instead of using the default formatters, you can provide a list of formatters to the ReadAsAsync method. Использование список модулей форматирования полезно в том случае, если у вас есть модуль форматирования типа мультимедиа. Using a list of formatters is useful if you have a custom media-type formatter:

Отправить запрос POST для создания ресурса Sending a POST Request to Create a Resource

Следующий код отправляет запрос POST, содержащий Product экземпляра в формате JSON: The following code sends a POST request that contains a Product instance in JSON format:

PostAsJsonAsync метод: The PostAsJsonAsync method:

  • Сериализует объект в формат JSON. Serializes an object to JSON.
  • Отправляет полезные данные JSON в запросе POST. Sends the JSON payload in a POST request.

Если запрос выполнен успешно: If the request succeeds:

  • Он должен вернуть ответ 201 (создано). It should return a 201 (Created) response.
  • Ответ должен содержать URL-адрес созданные ресурсы в заголовке Location. The response should include the URL of the created resources in the Location header.

Отправка запроса PUT для обновления ресурса Sending a PUT Request to Update a Resource

Следующий код отправляет запрос PUT для обновления продукта: The following code sends a PUT request to update a product:

PutAsJsonAsync метод работает подобно PostAsJsonAsync, за исключением того, что он отправляет запрос PUT вместо POST. The PutAsJsonAsync method works like PostAsJsonAsync, except that it sends a PUT request instead of POST.

Отправляя запрос DELETE для удаления ресурса Sending a DELETE Request to Delete a Resource

Следующий код отправляет запрос DELETE для удаления продукта: The following code sends a DELETE request to delete a product:

Например GET запрос DELETE не имеет текста запроса. Like GET, a DELETE request does not have a request body. Не нужно указать формат JSON или XML с помощью удаления. You don’t need to specify JSON or XML format with DELETE.

Тестирование образца Test the sample

Чтобы проверить его: To test the client app:

Скачайте и запуск приложения сервера. Download and run the server app. Указания по скачиванию. Download instructions. Убедитесь, что работает серверное приложение. Verify the server app is working. Например http://localhost:64195/api/products должен возвращать список продуктов. For example, http://localhost:64195/api/products should return a list of products.

Задайте базовый URI для HTTP-запросов. Set the base URI for HTTP requests. Измените номер порта к порту, используемому в серверное приложение. Change the port number to the port used in the server app.

Запустите клиентское приложение. Run the client app. Выводятся следующие результаты. The following output is produced:

О чем речь в POST запросе на C#?

Есть код на шарпе, нужно переписать его на nodejs. Не понимаю о чем речь в запросе.

Пока написал это. Помогите набросать аналог этого реквеста на ноде.

  • Вопрос задан более трёх лет назад
  • 361 просмотр

Что именно вы не понимаете?

X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySerialNumber, ClientCert_SerialNumber, false);

вот эти строки, например

1) из хранилища сертификатов текущего пользователя вытаскивается сертификат по его серийному номеру;
2) к запросу прикладывается полученный из хранилища клиентский сертификат;
3) содержимое poststr пишется в тело POST-запроса;
4) запрос отправляется и программа ждет ответ от сервера;
5) ответ перекодируется в строку result и выводится в консоль;

Как в ноде вытащить сертификат из Виндового хранилища — понятия не имею. С остальным вы и сами разберетесь.

c# код POST запроса

Hannes

Client

Помогите, пожалуйста, сформировать c# код POST запроса.
Бюджет 200wmr, если кто-то поможет — буду очень признателен!

Нужно передать:
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0
Authorization: access-token zKadFv1s3zxus5yd9c1wtgkFYVTsE93NdQPhyhyhnR1ifh6ODyyPi4gMVXv

Тело запроса:
campaign >
Ответ сервера положить в переменную

catol

Client

Документация с примером.

А вообще то можешь просто кубиком с делать в ZM — там проще простого!

POST запрос на C#

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

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(«www.google.ru», 80);

byte[] contentLenght = Encoding.ASCII.GetBytes(«search?hl=ru&source=hp&q=test+request&aq=f&aqi=g1&aql=&oq=&gs_rfai=»);
string[] masRequestString = <
«POST /search?hl=ru&source=hp&q=test+request&aq=f&aqi=g1&aql=&oq=&gs_rfai= HTTP/1.1\r\n» ,
«Host: www.google.ru\r\n»,
«User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6\r\n»,
«Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n»,
«Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n»,
«Referer: http://www.google.ru/\r\n» ,
«Content-Length: » + contentLenght.Length + «\r\n\r\n» ,
«search?hl=ru&source=hp&q=test+request&aq=f&aqi=g1&aql=&oq=&gs_rfai=»>;
string request = string.Concat(masRequestString);

Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
socket.Send(bytesSent, bytesSent.Length, 0);
Byte[] bytesReceived = new Byte[0x400];
int bytes = socket.Receive(bytesReceived, bytesReceived.Length, 0);
string content = Encoding.ASCII.GetString(bytesReceived, 0, bytes);

P.S Гугл POST запрос не обрабатывает (у него GET), написал как пример.И да, за работоспособность кода не отвечаю ибо писал в блокноте и не компилил.

Как отправить SOAP-запрос и получить ответ в C#

Тестируя различные API с помощь SoapUI, мы решили, что хотим иметь гибкие и настраиваемые под нас тесты. Для этого мы решили тестировать API не через SoapUI, а писать автоматизированные тесты на C#. Теперь рассмотрим, как отправлять SOAP-запросы и получать ответы в C# и при этом используя минимальное количество строк кода и без подключений «WSDL» к проекту. Про REST API и C# я, возможно, напишу статью позже.

В данной статье будет указан несуществующий API, поэтому не стоит пытаться его проверять.

Допустим у нас есть сервис, у которого есть API, и он доступен по адресу:

У данного сервиса есть ряд методов и один из них «GetInfo», который позволяет запрашивать информацию по транспортному средству передавая идентификатор транспортного средства.

Создаём в C# новый проект. Я создал проект с типом Windows Form. В проект подключим:

Как сделать HTTP-запрос HTTP POST

Канонический
Как я могу сделать HTTP-запрос и отправить некоторые данные, используя метод POST ?

Я могу сделать запрос GET , но не знаю, как сделать POST .

Есть несколько способов выполнить запросы HTTP GET и POST :

Метод A: HttpClient (предпочтительный)

Это обертка вокруг HttpWebRequest . Сравните с WebClient .

Доступно в: .NET Framework 4.5+ , .NET Standard 1.1+ , .NET Core 1.0+ .

В настоящее время предпочтительный подход. Асинхронный. Портативная версия для других платформ доступна через NuGet.

Setup

Setup Рекомендуется создать экземпляр HttpClient на весь срок службы вашего приложения и поделиться им.

Смотрите HttpClientFactory , чтобы найти решение для внедрения зависимостей.

Метод B: сторонние библиотеки

Испытанная и протестированная библиотека для взаимодействия с REST API. Портативный. Доступно через NuGet.

Более новая библиотека со свободным API и помощниками в тестировании. HttpClient под капотом. Портативный. Доступно через NuGet.

Метод C: HttpWebRequest (не рекомендуется для новой работы)

Доступно в: .NET Framework 1.1+ , .NET Standard 2.0+ , .NET Core 1.0+

Метод D: WebClient (не рекомендуется для новой работы)

Это обертка вокруг HttpWebRequest . Сравните с HttpClient .

Доступно в: .NET Framework 1.1+ , NET Standard 2.0+ , .NET Core 2.0+

Простой запрос GET

Это полный рабочий пример отправки/приема данных в формате JSON, я использовал VS2013 Express Edition

Здесь есть несколько действительно хороших ответов. Позвольте мне опубликовать другой способ установки заголовков с помощью WebClient(). Я также покажу вам, как установить ключ API.


Простой (однострочный, без проверки ошибок, без ожидания ответа) решение, которое я нашел до сих пор

используйте с осторожностью!

В этом решении используются только стандартные вызовы .NET.

  • Используется в корпоративном приложении WPF. Использует async/await, чтобы избежать блокировки пользовательского интерфейса.
  • Совместим с .NET 4. 5+.
  • Протестировано без параметров (требуется «GET» за кулисами).
  • Протестировано с параметрами (требуется «POST» за кулисами).
  • Протестировано на стандартной веб-странице, такой как Google.
  • Протестировано с внутренним веб-сервисом на основе Java.

Для вызова без параметров (используется «GET» за кулисами):

Для вызова с параметрами (используется «POST» за кулисами):

Статья C# Создание веб-сервера с помощью класса HttpListener

Pirnazar

Well-known member

В этой небольшой статье рассмотрим на простом примере, как создать веб-сервер с помощью языка c#, который будет работать в синхронном режиме.

Дано: два компьютера: (192.168.10.10) и (192.168.10.1).

Компьютер “A” (клиент) – отправляет запросы веб-серверу с помощью веб-браузера (хром, опера и так далее).

Компьютер “Б” — это веб-сервер, который принимает и обрабатывает входящие запросы, отправленные методами: GET и POST, а так же динамически создаёт html страницу для отправки клиенту в качестве ответа.

Для начала создадим новый проект типа Windows Forms Application, после чего добавим на форму элемент управления Button (кнопку).

Для создания веб-сервера воспользуемся классом HttpListener из пространства имён System.Net

. А также создаёт динамическую страницу, которая содержит форму с текстовым полем и кнопкой типа Submit для отправки клиенту.

Для вызова метода Start требуются права администратора (запустить Visual Studio от имени Администратора), иначе возникает ошибка Отказано в доступе”.

Метод ShowRequestData обрабатывает http запросы, отправленные методом POST, и выводит введённое имя. Если клиент отправляет слово stop, то веб-сервер приостанавливает свою работу. Если вместо метода Stop вызвать метод Close, то сервер полностью завершит свою работу.

1. Запускаем веб-сервер, нажав на кнопку Запустить.

2. На клиенте открывает любой доступный веб-браузер, и в адресной строке вводим адрес нужного нам ресурса, в результате появиться форма. Вводим имя и нажимаем на кнопку.

3. На сервере появляется сообщение, которое содержит введенное имя.

4. Для остановки сервера отправляем слово stop (можно заменить любым другим).

Порт в строке uri является необязательным, если он не указывается, то (по умолчанию) будет использоваться порт 80.

Как вернуть значение клиенту?

1. Создадим поле name типа string, в котором будет храниться возвращаемое пользователю значение.

The Codeby

ООО Кодебай

САНЯ
15.01.2020 в 06:50
Админ привет)))) в общем хотя добавил «System.Web» Ошибка 1 Имя типа или пространства имен «HttpUtility» отсутствует в пространстве имен «System.Web»
(пропущена ссылка на сборку?) C:UsersпапаAppDataLocalTemporary ProjectsWindowsFormsApplication1Form1.cs 107 39 WindowsFormsApplication1

ADMIN
15.01.2020 в 18:29
Привет. В свойствах проекта есть пункт «Target framework» измени .Net Framework 4 Client Profile на просто .Net Framework 4

Саму сборку System.Web нужно добавить в Refferences из папки:

САНЯ
17.01.2020 в 00:51
все ошибка ушла, но теперь при нажатии кнопки, ошибка на server.start Неверный формат сетевого имени, блин что не так))) я уже тебя новерно задолбал))) сорри в общем)

ADMIN
17.01.2020 в 18:39
Исходник полностью рабочий.

САНЯ
19.01.2020 в 06:03
h_t_t_p://127.0.0.1:7777/say/ работает именно так и все отлично, но с телефона так работать не будет(бред но попробывал) в чем может быть проблема? почему не подходит 192,хххххххх , бук подключен к вайфаю может из за этого? и такой вопрос, после запуска форма зависает, не передвинуть не закрыть в общем ничего.

САНЯ
20.01.2020 в 08:46
попробывал использовать IPv4 192хххх работает, но с мобильного что не то, в хроме прогружается но нету текстового поля и тд, со стандартного браузера ваще не грузит

ADMIN
20.01.2020 в 17:45
Форма зависает потому что работа ведется в синхронном режиме, вот здесь происходит блокировка:

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

Для начала нужно проверить видят ли друг друга сервер и телефон. Для этого нужно выполнить команду ping

Если оба видят друг друга, то тогда может быть firewall блокирует порт или роутер не работает маршрутизация, или проброс порта нужно сделать, причин много.

САНЯ
22.01.2020 в 07:28
в общем пингуеться 192,168,10,1 основной флюз с телефона, с пк пингуетсья телефон 192,168,10,103 , а вот сервер с телефона 192,168,10,102(IPv4) не пингуеться

САНЯ
22.01.2020 в 22:33
админ сорри все разобрался, работает то что нужно, ты крут. спасибо

САНЯ
24.01.2020 в 11:59
)) а такой вопрос как можно получить ответь в браузер, так сказать в другое текстовое поле?

САНЯ
25.01.2020 в 07:28
и если возможно картинку, типо видео трансляции с пк на браузер?

ADMIN
26.01.2020 в 01:52
много может быть способов: ajax, вернуть форму со значением, DOM и так далее.

«и если возможно картинку, типо видео трансляции с пк на браузер?» — Что?

САНЯ
27.01.2020 в 11:59
ну вот смотри, я отправляю что то в браузере, выпадает сообщение, а можно получить это обратно в браузер только в другую строку, ну к примеру, я отправляю «статус батареи» и он в ответ присылает процент заряда в другую строку.
и можно ли сделать так же видео трансляцию с пк в браузер?

ADMIN
28.01.2020 в 10:54
«Видео трансляцию с пк в браузер» — сделать можно, тем более, что исходников и статей на эту тему полно в инете. И вернуть значение в ответ можно, ведь сервер отправляет страницу клиенту.

САНЯ
29.01.2020 в 10:08
хм, чтоб получить текст обратно, нужно сделать другую строку.

делаю так, просто добавляю

добавил, в итоге нет ничего;

и подскажи где в коде делать отправку обратно в браузер, в эту строку?

ADMIN
30.01.2020 в 01:24
Добавил пример решения в конце статьи.

САНЯ
31.01.2020 в 12:07
походу руки у меня кривые) что то не могу сделать все правильно! может ты раскидаешь в самой статье? добавляю выдает ошибку! спасибо
string responseString = string.Format(htmlpage, name);

ADMIN
31.01.2020 в 22:13
«добавляю выдает ошибку» — я гадать на кофейной гуще не умею, что именно за ошибка и где возникает exception?

САНЯ
02.02.2020 в 10:27
посмотри как добавил в код, правильно?

ADMIN
03.02.2020 в 06:41
Нужно было не создавать ещё одну переменную, а просто переименовать переменную responseString на htmlpage. <0>— место подстановки значения переменной name.

САНЯ
03.02.2020 в 22:21
Админ привет, делаю так чтоб получить заряд бука(%), но в сообщении возвращается 0,90 ну т.е 90%, а в браузере иероглифы)) как правильно сделать?

САНЯ
05.02.2020 в 09:58
Русский текст так же, отображается иероглифами

САНЯ
06.02.2020 в 03:25
И если сделать асинхронный сервер, что тося, в его работе?
просто нужно получать доступ к форме, можешь переделать?

ADMIN
07.02.2020 в 08:02
В исходнике добавил, как решить проблему с кодировкой.

ADMIN
08.02.2020 в 09:52
«И если сделать асинхронный сервер, что тося, в его работе? просто нужно получать доступ к форме, можешь переделать?»

Переделывать никто ничего не будет — это не сайт заказов (для этого есть фриланс). Будет время добавлю статью, а в данный момент возможности сделать это — нет.
Про работу с потоками можно погуглить инфы очень много, в том числе можно легко найти, как получить доступ к форме из другого потока.

GREEN16
08.02.2020 в 15:33
Добрый вечер! У меня ошибка при server.Start
Необработанное исключение типа «System.Net.HttpListenerException» в System.dll
Дополнительные сведения: Отказано в доступе
Вроде всё сделал правильно, в чём может быть проблема?

ADMIN
10.02.2020 в 06:56
Привет. В статье вроде всё написано: Для вызова метода Start требуются права администратора (запустить Visual Studio от имени Администратора), иначе возникает ошибка «Отказано в доступе”.

ИВАН
11.02.2020 в 11:04
в начале статьи бы написал 1-2 абзаца поподробнее что за веб-сервер, зачем он и как использовать

ADMIN
11.02.2020 в 18:27
Я думаю, что в этом нет смысла, потому что эта статья изначальна была рассчитана на тех, кто уже знает, что такое веб-сервер.

МАКСИМ
13.02.2020 в 00:43
«саня
19.08.2015 в 10:10
все ошибка ушла, но теперь при нажатии кнопки, ошибка на server.start Неверный формат сетевого имени, блин что не так))) я уже тебя новерно задолбал))) сорри в общем)»

У меня так же. Через localhost работает, а через 192.ххх -нет…

Запускаю с бука, а с телефона не открывает

ADMIN
13.02.2020 в 21:03
У меня так же. Через localhost работает, а через 192.ххх -нет…

Указанный адрес 192.xxx заканчивается на символ / ?

МАКСИМ
15.02.2020 в 02:52
Код использовал из вашего примера(адрес свой IPv4). Если подключаюсь с телефона или пк, то страница долго грузится и в итоге так и не загружается

ADMIN
15.02.2020 в 20:17
Пример из данной статьи проверялся уже много раз, поэтому ошибка либо в коде, либо в сети.

Как вариант нужно проверить:

Соединение между пк (команда ping)
Запущен ли сервер, и на каком порту он ожидает соединения (команда netstat на сервере)
Файрвол (возможно включен)
Uri, который использует клиент для подключения к серверу
АННА
17.02.2020 в 03:00
Когда я хочу вернуть значение пользователю и в коде пишу

. Name: .
то в браузере на странице так и отображается

Name: <0>
а введенное значение не отображается. В чем может быть дело?

АННА
18.02.2020 в 06:01
Всё выяснила!

ADMIN
19.02.2020 в 02:58
Возможно пропущена или добавлена лишняя кавычка(и) при создании строки с html кодом.

АЛЕКСЕЙ
19.02.2020 в 14:16
Всё равно ругается, когда ввожу адрес 192.168.10.1:8080/say/ , а например с 127.0.0.1:7777/say/ всё ок)
И от имени администратора запускал)) От чего только не запускал, всё равно ошибка(

Необработанное исключение типа
«System.ObjectDisposedException» в System.dll
Дополнительные сведения: Доступ к ликвидированному объекту невозможен.

ADMIN
21.02.2020 в 04:11
Для начала стоит поставить пару точек остановы и посмотреть в каком месте возникает исключение, тогда хотя бы станет понятно, почему объект уничтожен (ObjectDisposedException).

Авторизация на C# POST запросом

using System.Net;
using System.Text;
using System.IO;

private void button1_Click(object sender, EventArgs e)
<
const String CorrectAuthText = «Авторизация прошла успешно»;
var request = (HttpWebRequest)WebRequest.Create(«http://itist.ru/yttestscripts/demoauth.php»);
var postData = «btn_auth=True»;
postData += «&login=» + textBoxLogin.Text;
postData += «&password=» + textBoxPass.Text;
var data = Encoding.ASCII.GetBytes(postData);
request.Method = «POST»;
request.ContentType = «application/x-www-form-urlencoded»;
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
< stream.Write(data, 0, data.Length); >
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
if (responseString.Contains(CorrectAuthText))
<
MessageBox.Show(«Авторизованы!»);
>
else
<
MessageBox.Show(«Не удалось авторизоваться!»);
>

Простая авторизация на C# POST запросом

Пример страницы на PHP
Видеоурок

Авторизация на DELPHI
Видеоурок

Цукерберг рекомендует:  Переход по страницам с помощью горячих клавиш
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих