Czy WebRequest Jest Właściwym Narzędziem C# Do Interakcji Ze Stronami Internetowymi?

Piszę małe narzędzie w C#, które będzie musiało wysyłać i odbierać dane do / ze strony internetowej za pomocą formatowania POST i json. Nigdy wcześniej nie robiłem czegoś takiego w C# (ani w żadnym innym języku), więc staram się znaleźć przydatne informacje, które pomogą mi zacząć.

Znalazłem kilka informacji na temat klasy WebRequest w C# (konkretnie z TUTAJ ), ale zanim zacznę się w nią zagłębiać, zastanawiałem się, czy jest to odpowiednie narzędzie do tego zadania.

Znalazłem mnóstwo narzędzia do konwersji danych do formatu json, ale nie wiele więcej, więc wszelkie informacje byłyby naprawdę pomocne tutaj, gdybym skończył w ślepym zaułku.

Author: Eric Schoonover, 2008-09-18

7 answers

WebRequest, a dokładniej Klasa HttpWebRequest jest dobrym punktem wyjścia do tego, co chcesz osiągnąć. Aby utworzyć żądanie, użyjesz WebRequest.Utwórz i wyślij utworzone żądanie do HttpWebRequest, aby faktycznie go użyć. Następnie utworzysz swoje dane postu i wyślesz je do strumienia:

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();

Podobnie możesz odczytać odpowiedź z powrotem za pomocą metody GetResponse, która pozwoli Ci odczytać wynikowy strumień odpowiedzi i zrobić wszystko, co potrzebujesz zrób. Więcej informacji na temat zajęć można znaleźć na stronie:

Http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

 26
Author: Wolfwyrd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-16 10:34:45

WebClient {[3] } jest czasami łatwiejszy w użyciu niż WebRequest. Może zechcesz na to spojrzeć.

Do deserializacji JSON będziesz chciał zajrzeć do klasy JavaScriptSerializer .

Przykład 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);
    }
}

Oznaczone jako wiki na wypadek, gdyby ktoś chciał zaktualizować kod

 19
Author: spoon16,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-28 21:34:30

Jeśli chodzi o publikowanie danych na stronie internetowej, System. Net. HttpWebRequest (implementacja WebRequest specyficzna dla HTTP) jest całkowicie przyzwoitym rozwiązaniem. Obsługuje SSL, żądania asynchroniczne i wiele innych gadżetów i jest dobrze udokumentowany na MSDN.

Ładunek może być dowolny: dane w formacie JSON lub cokolwiek -- tak długo, jak ustawisz właściwość ContentType na coś, czego serwer oczekuje i rozumie (najprawdopodobniej application / json, text / json lub text / x-JSON), wszystko będzie będzie dobrze.

Jeden potencjalny problem podczas korzystania z HttpWebRequest z usługi systemowej: ponieważ używa proxy IE i informacji poświadczeniowych, domyślne zachowanie może być nieco dziwne, gdy działa jako użytkownik LOCALSYSTEM(lub w zasadzie każde konto, które nie loguje się interaktywnie regularnie). Ustawienie właściwości Proxy i Authentication na Nothing (lub, jak ludzie z C# wolą to nazywać, null, tak myślę) powinno tego unikać.

 1
Author: mdb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 09:58:02

Używałem WebRequest do interakcji z witrynami. Jest to właściwe "narzędzie"

Nie mogę skomentować aspektu JSON twojego pytania.

 0
Author: Seb Rose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 09:50:45

Aktualnie najwyżej oceniana odpowiedź jest pomocna, ale nie wysyła ani nie odbiera JSON.

Oto przykład, który używa JSON zarówno do wysyłania, jak i odbierania:

Jak opublikować obiekt json w serwisie WWW

A oto pytanie StackOverflow, które najbardziej pomogło mi rozwiązać ten problem:

Problemy z wysyłaniem i odbieraniem JSON pomiędzy ASP.net serwis internetowy i ASP.Net web client

I tu jest jeszcze jeden związany pytanie:

Wywołanie Json z C #

 0
Author: Michael Maddox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:17

Aby przekonwertować z obiektu instancji na sformatowany łańcuch znaków json i odwrotnie, wypróbuj Json.NET: http://json.codeplex.com/

Obecnie używam go do projektu i jest łatwy do nauczenia się i pracy z nim oraz oferuje pewną elastyczność w zakresie serializacji i niestandardowych konwerterów typu. Obsługuje również składnię LINQ do odpytywania wejścia json.

 0
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-05 13:41:54
 -1
Author: redsquare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-12 14:03:44