Является ли WebRequest правильным инструментом С# для взаимодействия с веб-сайтами?
Я пишу небольшой инструмент на С#, который нужно будет отправлять и получать данные на/с веб-сайта, используя POST и json-форматирование. Я никогда не делал ничего подобного раньше на С# (или на любом другом языке), поэтому я изо всех сил пытаюсь найти полезную информацию, чтобы начать работу.
Я нашел некоторую информацию о классе WebRequest в С# (специально из здесь), но прежде чем начать погружение в него, я задавался вопросом, это был правильный инструмент для работы.
Я нашел множество инструментов для преобразования данных в json-формат, но не намного больше, поэтому любая информация была бы действительно полезной здесь, если бы я закончил тупик.
Ответы
Ответ 1
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
Ответ 2
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 в случае, если кто-то хочет обновить код
Ответ 3
Когда дело доходит до POSTing данных на веб-сайт, System.Net.HttpWebRequest (специфичная для HTTP реализация WebRequest) является совершенно приличным решение. Он поддерживает SSL, асинхронные запросы и множество других лакомств и хорошо документирован в MSDN.
Полезная нагрузка может быть любой: данные в формате JSON или что угодно - до тех пор, пока вы установите свойство ContentType на то, что сервер ожидает и понимает (скорее всего, приложение /json, text/json или text/x-json), все будет хорошо.
Одна потенциальная проблема при использовании HttpWebRequest из системной службы: поскольку она использует прокси-сервер IE и учетную информацию, поведение по умолчанию может быть немного странным при работе в качестве пользователя LOCALSYSTEM (или, в основном, любой учетной записи, которая не регистрируется в интерактивном режиме регулярно). Настройка свойств прокси и аутентификации на Nothing
(или, как вы, например, С#, люди предпочитают ее называть, null
, я думаю), следует избегать этого.
Ответ 4
Я использовал WebRequest для взаимодействия с веб-сайтами. Это правильный "инструмент"
Я не могу комментировать аспекты JSON вашего вопроса.
Ответ 5
Чтобы преобразовать из экземпляра объекта в форматированную строку json и наоборот, попробуйте Json.NET:
http://json.codeplex.com/
В настоящее время я использую его для проекта, и он легко учится и работает, и предлагает некоторую гибкость с точки зрения сериализации и конвертеров настраиваемого типа. Он также поддерживает синтаксис LINQ для запроса ввода json.
Ответ 6
Самый высокий рейтинг ответа полезен, но он не отправляет и не получает JSON.
Вот пример, который использует JSON для отправки и получения:
Как разместить объект json в веб-сервисе
И вот вопрос StackOverflow, который помог мне больше всего решить эту проблему:
Проблемы с отправкой и получением JSON между веб-службой ASP.net и веб-клиентом ASP.Net
И вот еще один смежный вопрос:
вызов json с С#
Ответ 7
в 3.5 есть встроенный jsonserializer. Веб-поиск - это нужный класс, который вы ищете.
Несколько примеров: