回答:
WebClientは、最も一般的なタスクを簡略化するためにHttpWebRequestの上に構築された高レベルの抽象化です。たとえば、HttpWebResponseからコンテンツを取得する場合は、応答ストリームから読み取る必要があります。
var http = (HttpWebRequest)WebRequest.Create("http://example.com");
var response = http.GetResponse();
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();
WebClientでは、次のようにしますDownloadString
。
var client = new WebClient();
var content = client.DownloadString("http://example.com");
注:using
簡潔にするため、両方の例のステートメントは省略しています。あなたは間違いなくあなたのウェブリクエストオブジェクトを適切に処分するように気をつけるべきです。
一般に、WebClientは迅速でダーティーな単純な要求に適し、HttpWebRequestは要求全体をより詳細に制御する必要がある場合に適しています。
HttpClient
...(?かない場合があります)上記の激論のいくつかを解決するかもしれない、.NET 4.5が付属しています
using (WebClient client = new WebClient())
また、WebClientにはタイムアウトプロパティがありません。dafault値が100秒であり、インターネット接続がないかどうかを示すには多すぎるため、これが問題です。
その問題の回避策はこちらですhttps://stackoverflow.com/a/3052637/1303422
私は返信が長すぎることを知っていますが、将来の読者のための情報目的としてのみです。
WebRequest
System.Object
System.MarshalByRefObject
System.Net.WebRequest
WebRequest
抽象基本クラスです。したがって、実際には直接使用しません。派生クラス- HttpWebRequest
とを使用しFileWebRequest
ます。
のCreateメソッドを使用WebRequest
して、のインスタンスを作成しますWebRequest
。GetResponseStream
を返しますdata stream
。
からのクラスもFileWebRequest
ありFtpWebRequest
ます。通常、を使用して、リクエストを作成し、そのリクエストに応じて戻り値を、またはに変換します。以下に例を示します。inherit
WebRequest
WebRequest
HttpWebRequest
FileWebRequest
FtpWebRequest
例:
var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com");
var _response = (HttpWebResponse)_request.GetResponse();
WebClient
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Net.WebClient
WebClient
によって識別されるリソースに対する一般的な操作sending
とreceiving
データを提供しますURI
。簡単に言うと、これはの上位レベルの抽象化ですHttpWebRequest
。この「共通の操作」を区別するものであるWebClient
から、HttpWebRequest
また、以下のサンプルのように、:
例:
var _client = new WebClient();
var _stackContent = _client.DownloadString("http://stackverflow.com");
DownloadData
とインスタンスのDownloadFile
下にも操作がありWebClient
ます。これらの一般的な操作は、通常使用するコードも簡素化しますHttpWebRequest
。を使用してHttpWebRequest
、リクエストの応答を取得し、インスタンス化StreamReader
して応答を読み取り、最後に、結果を必要なタイプに変換する必要があります。ではWebClient
、単にを呼び出しますDownloadData, DownloadFile or DownloadString
。
ただし、はリクエストするリソースのをWebClient.DownloadString
考慮しないことに注意してencoding
ください。したがって、エンコードと指定しないと、おそらく奇妙な文字を受け取ることになります。
注: 基本的に、「WebClientはWebrequestと比較して数行のコードを必要とします」
webClient.UploadData(url, "POST", bytes)
メソッドの指定に使用できました(MSDNドキュメントを参照)。
ServicePointManager.Expect100Continue = false
、他の非標準的なことを行い、多くの癖と特異性を持っています。これらの問題を解決するためにRestSharpを起動しました。