web-dev-qa-db-ja.com

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

POSTとjsonのフォーマットを使用してWebサイトとの間でデータを送受信する必要がある小さなツールをC#で書いています。これまでC#でこれまで行ったことはありません(またはどんな言語でも)だから、始めるために役立つ情報を見つけるのに苦労しています。

C#でWebRequestクラスに関するいくつかの情報を見つけました(具体的には here から)。これに飛び込む前に、これが仕事に適したツールかどうか疑問に思いました。

データをjson形式に変換するツールはたくさんありますが、それ以外はそれほど多くないので、行き止まりになってしまった場合に役立つ情報がここにあります。

35
Lee

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メソッドを使用して応答を読み取ることができます。これにより、結果の応答ストリームを読み取り、他に必要なことをすべて実行できます。クラスの詳細については、次のURLをご覧ください。

http://msdn.Microsoft.com/en-us/library/system.net.httpwebrequest.aspx

27
Wolfwyrd

WebClientWebRequest よりも使いやすい場合があります。あなたはそれを見てみたいかもしれません。

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

誰かがコードを更新したい場合に備えて、ウィキとしてマークされます

19
Eric Schoonover

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と思います)。

1
mdb

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

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

0
Jay

現在最も高い評価の回答は役に立ちますが、JSONを送受信しません。

送信と受信の両方にJSONを使用する例を次に示します。

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

そして、これが私がこの問題を最も解決するのに役立つStackOverflowの質問です:

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

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

C#でのjson呼び出し

0
Michael Maddox

私はWebRequestを使用してWebサイトと対話しました。それは正しい「道具」です

質問のJSONの側面についてコメントすることはできません。

0
Seb Rose