Является ли WebRequest подходящим инструментом C # для взаимодействия с сайтами? - PullRequest
34 голосов
/ 18 сентября 2008

Я пишу небольшой инструмент на C #, который должен будет отправлять и получать данные на / с веб-сайта, используя формат POST и JSON. Я никогда не делал ничего подобного раньше в C # (или на любом другом языке), поэтому я изо всех сил пытаюсь найти некоторую полезную информацию, чтобы начать меня.

Я нашел некоторую информацию о классе WebRequest в C # (в частности, из здесь ), но прежде чем я углубился в него, я подумал, был ли это правильный инструмент для работы.

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

Ответы [ 7 ]

26 голосов
/ 18 сентября 2008

WebRequest, а точнее класс HttpWebRequest, является хорошей отправной точкой для того, чего вы хотите достичь. Для создания запроса вы будете использовать WebRequest.Create и приведете созданный запрос к HttpWebRequest, чтобы фактически использовать его. Затем вы создадите свои данные и отправите их в поток как:

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

19 голосов
/ 18 сентября 2008

WebClient иногда проще в использовании, чем WebRequest . Вы можете взглянуть на это.

Для десериализации JSON вы захотите взглянуть на класс JavaScriptSerializer .

Пример WebClient:

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 на случай, если кто-то захочет обновить код

1 голос
/ 18 сентября 2008

Когда дело доходит до размещения данных на веб-сайте, System.Net.HttpWebRequest (специфичная для HTTP реализация WebRequest) является вполне приличным решением. Он поддерживает SSL, асинхронные запросы и кучу других вкусностей и хорошо документирован в MSDN.

Полезная нагрузка может быть чем угодно: данными в формате JSON или чем-то еще - при условии, что для свойства ContentType установлено то, что сервер ожидает и понимает (скорее всего, application / json, text / json или text / x-json), все будет хорошо.

Одна потенциальная проблема при использовании HttpWebRequest из системной службы: поскольку он использует прокси-сервер IE и информацию о полномочиях, поведение по умолчанию может быть немного странным при работе в качестве пользователя LOCALSYSTEM (или, по сути, любой учетной записи, которая не выполняет интерактивный вход на регулярной основе). Если для свойств Proxy и Authentication установлено значение Nothing (или, как вы, C #, предпочитаете называть, null, я полагаю), этого следует избегать.

0 голосов
/ 30 мая 2012

Ответ с наивысшим рейтингом полезен, но он не отправляет и не получает JSON.

Вот пример, который использует JSON для отправки и получения:

Как разместить объект json в веб-сервисе

А вот вопрос StackOverflow, который больше всего помог мне решить эту проблему:

Проблемы с отправкой и получением JSON между веб-службой ASP.net и веб-клиентом ASP.Net

А вот еще один связанный с этим вопрос:

JSON Call с C #

0 голосов
/ 06 декабря 2010

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

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

0 голосов
/ 18 сентября 2008

в 3.5 есть встроенный jsonserializer. Веб-запрос - это тот класс, который вам нужен.

Несколько примеров:

0 голосов
/ 18 сентября 2008

Я использовал WebRequest для взаимодействия с сайтами. Это правильный «инструмент»

Я не могу комментировать JSON-аспект вашего вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...