.NETのWebClient
クラスとHttpWebRequest
クラスの違いは何ですか?どちらも非常によく似ています。実際、なぜそれらが1つのクラスにマージされなかったのでしょう(メソッド/変数などが多すぎることが理由の1つですが、.NETにはその規則に違反する他のクラスがあります)。
ありがとう。
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
ステートメントを省略しました。Web要求オブジェクトを適切に破棄するように注意する必要があります。
一般に、WebClientは迅速でダーティな単純な要求に適しています。HttpWebRequestは、要求全体をより詳細に制御する必要がある場合に適しています。
また、WebClientにはタイムアウトプロパティがありません。 dafault値は100秒であり、インターネット接続がないかどうかを示すには多すぎるため、これが問題です。
その問題の回避策はこちら https://stackoverflow.com/a/3052637/1303422
私は返信するのが長すぎることを知っていますが、将来の読者のための情報目的として:
WebRequest
System.Object
System.MarshalByRefObject
System.Net.WebRequest
WebRequest
は抽象基本クラスです。したがって、実際には直接使用しません。派生クラス-HttpWebRequest
およびFileWebRequest
を介して使用します。
WebRequest
のインスタンスを作成するには、WebRequest
のCreateメソッドを使用します。 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 "