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.
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
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
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ć.
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.
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:
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.
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
W 3.5 jest wbudowany jsonserializer. Webrequest to odpowiednia Klasa, której szukasz.
Kilka przykładów:
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