Является ли WebRequest Подходящим инструментом C # Для взаимодействия с веб-сайтами?
-
01-07-2019 - |
Вопрос
Я пишу небольшой инструмент на C #, который должен будет отправлять и получать данные на / с веб-сайта, используя форматирование POST и json.Я никогда раньше не делал ничего подобного на C # (или любом другом языке на самом деле), поэтому я изо всех сил пытаюсь найти какую-нибудь полезную информацию, которая помогла бы мне начать.
Я нашел некоторую информацию о классе WebRequest в C # (в частности, из здесь) но прежде чем я начну углубляться в это, я задался вопросом, подходит ли этот инструмент для этой работы.
Я нашел множество инструментов для преобразования данных в формат json, но не более того, так что любая информация была бы здесь действительно полезна на случай, если я зайду в тупик.
Решение
WebRequest и, более конкретно, класс HttpWebRequest является хорошей отправной точкой для того, чего вы хотите достичь.Для создания запроса вы будете использовать WebRequest.Создайте и передайте созданный запрос HttpWebRequest, чтобы фактически использовать его.Затем вы создадите свои данные post и отправите их в поток следующим образом:
HttpWebRequest req = (HttpWebRequest)
WebRequest.Create("http://mysite.com/index.php");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
string postData = "var=value1&var2=value2";
req.ContentLength = postData.Length;
StreamWriter stOut = new
StreamWriter(req.GetRequestStream(),
System.Text.Encoding.ASCII);
stOut.Write(postData);
stOut.Close();
Аналогичным образом вы можете прочитать ответ обратно, используя метод GetResponse, который позволит вам прочитать результирующий поток ответов и сделать все, что еще вам нужно сделать.Вы можете найти более подробную информацию об этом классе по адресу:
http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx
Другие советы
Веб-клиент иногда его проще использовать, чем Веб-запрос.Возможно, вы захотите взглянуть на это.
Для десериализации JSON вам нужно будет взглянуть на JavaScriptSerializer ( Яваскриптсериализатор) класс.
Пример веб-клиента:
using (WebClient client = new WebClient ())
{
//manipulate request headers (optional)
client.Headers.Add (HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
//execute request and read response as string to console
using (StreamReader reader = new StreamReader(client.OpenRead(targetUri)))
{
string s = reader.ReadToEnd ();
Console.WriteLine (s);
}
}
Помечен как wiki на случай, если кто-то захочет обновить код
Когда дело доходит до размещения данных на веб-сайте, System.Net.HttpWebRequest - Системный запрос. (специфичная для HTTP реализация WebRequest) - вполне достойное решение.Он поддерживает SSL, асинхронные запросы и кучу других полезных функций и хорошо документирован в MSDN.
Полезная нагрузка может быть любой:данные в формате JSON или любом другом - до тех пор, пока вы устанавливаете для свойства ContentType значение, которое сервер ожидает и понимает (скорее всего, application / json, text / json или text / x-json), все будет в порядке.
Одна из потенциальных проблем при использовании HttpWebRequest из системной службы:поскольку он использует прокси-сервер IE и учетные данные, поведение по умолчанию может быть немного странным при запуске от имени пользователя LOCALSYSTEM (или, по сути, любой учетной записи, которая не входит в систему в интерактивном режиме на регулярной основе).Настройка свойств прокси-сервера и аутентификации на Nothing
(или, как вы, ребята из C #, предпочитаете это называть, null
, я думаю) следует избегать этого.
Я использовал WebRequest для взаимодействия с веб-сайтами.Это правильный "инструмент"
Я не могу комментировать JSON-аспект вашего вопроса.
Ответ с самым высоким рейтингом на данный момент полезен, но он не отправляет и не получает JSON.
Вот пример, который использует JSON как для отправки, так и для получения:
Как опубликовать объект json в веб-сервисе
И вот вопрос StackOverflow, который больше всего помог мне решить эту проблему:
Проблемы с отправкой и получением JSON между ASP.net веб-службой и ASP.Сетевой веб-клиент
И вот еще один связанный с этим вопрос:
Чтобы преобразовать объект экземпляра в строку в формате json и наоборот, попробуйте Json.NET:http://json.codeplex.com/
В настоящее время я использую его для проекта, и он прост в освоении и работе, а также предлагает некоторую гибкость с точки зрения сериализации и пользовательских преобразователей типов.Он также поддерживает синтаксис LINQ для запроса входных данных json.
в 3.5 есть встроенный jsonserializer.webrequest - это именно тот класс, который вы ищете.
Вот несколько примеров: