Является ли WebRequest Подходящим инструментом C # Для взаимодействия с веб-сайтами?

StackOverflow https://stackoverflow.com/questions/91275

  •  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 с помощью C#

Чтобы преобразовать объект экземпляра в строку в формате json и наоборот, попробуйте Json.NET:http://json.codeplex.com/

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

в 3.5 есть встроенный jsonserializer.webrequest - это именно тот класс, который вы ищете.

Вот несколько примеров:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top