WebRequest は Web サイトと対話するための適切な C# ツールですか?

StackOverflow https://stackoverflow.com/questions/91275

  •  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 を使用する例です。

WebサービスにJSONオブジェクトを投稿する方法

この問題を解決するのに最も役に立った StackOverflow の質問は次のとおりです。

ASP.net Web サービスと ASP.Net Web クライアントの間での JSON の送受信に関する問題

そして、これに関連する別の質問があります。

C# での json 呼び出し

インスタンス オブジェクトから JSON 形式の文字列へ、またはその逆に変換するには、Json.NET を試してください。http://json.codeplex.com/

私は現在プロジェクトでこれを使用していますが、学習と操作が簡単で、シリアル化とカスタム型コンバーターに関してある程度の柔軟性を提供します。また、JSON 入力をクエリするための LINQ 構文もサポートしています。

3.5 には jsonserializer が組み込まれています。webrequest は、探している適切なクラスです。

いくつかの例:

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top