WebRequest は Web サイトと対話するための適切な C# ツールですか?
-
01-07-2019 - |
質問
私は C# で小さなツールを作成しています。これは、POST と JSON 形式を使用して Web サイトとの間でデータを送受信する必要があります。私はこれまで C# (または他の言語) でこのようなことをしたことがなかったので、始めるのに役立つ情報を見つけるのに苦労しています。
C# の WebRequest クラスに関する情報をいくつか見つけました (特に ここ)しかし、それを始める前に、これがその仕事に適したツールなのかどうか疑問に思いました。
データを JSON 形式に変換するツールはたくさん見つかりましたが、それ以外はあまり見つけられなかったので、行き詰まった場合に備えて、ここでの情報が非常に役立ちます。
解決
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
他のヒント
ウェブクライアント よりも使いやすい場合があります Webリクエスト. 。見てみるといいかもしれません。
JSON デシリアライゼーションについては、次を参照してください。 JavaScriptシリアライザー クラス。
Webクライアントの例:
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 としてマークされています
Web サイトにデータを POST する場合、 System.Net.HttpWebRequest (WebRequest の HTTP 固有の実装) は完全に適切なソリューションです。SSL、非同期リクエスト、その他の優れた機能をサポートしており、MSDN で詳しく文書化されています。
ペイロードは何でも構いません。JSON 形式などのデータ -- ContentType プロパティをサーバーが期待し、理解できるもの (おそらく application/json、text/json、または text/x-json) に設定している限り、すべて問題ありません。
システム サービスから HttpWebRequest を使用する場合の潜在的な問題が 1 つあります。IE プロキシと資格情報を使用するため、LOCALSYSTEM ユーザー (または基本的に、定期的に対話的にログオンしないアカウント) として実行すると、デフォルトの動作が少し奇妙になる可能性があります。プロキシと認証のプロパティを次のように設定します。 Nothing
(または、C# の人が好むように、 null
, 、おそらく)それは避けるべきです。
Web サイトとのやり取りに WebRequest を使用しました。それは正しい「ツール」です
あなたの質問の JSON の側面についてはコメントできません。
現在最も評価の高い回答は役に立ちますが、JSON を送受信しません。
以下は、送信と受信の両方に JSON を使用する例です。
この問題を解決するのに最も役に立った StackOverflow の質問は次のとおりです。
ASP.net Web サービスと ASP.Net Web クライアントの間での JSON の送受信に関する問題
そして、これに関連する別の質問があります。
インスタンス オブジェクトから JSON 形式の文字列へ、またはその逆に変換するには、Json.NET を試してください。http://json.codeplex.com/
私は現在プロジェクトでこれを使用していますが、学習と操作が簡単で、シリアル化とカスタム型コンバーターに関してある程度の柔軟性を提供します。また、JSON 入力をクエリするための LINQ 構文もサポートしています。
3.5 には jsonserializer が組み込まれています。webrequest は、探している適切なクラスです。
いくつかの例: