.NETのWebClientクラスとHTTPWebRequestクラスの違いは何ですか?


178

と.NET WebClientHttpWebRequestクラスの違いは何ですか?どちらも非常によく似ています。実際、それらが1つのクラスにマージされなかったのはなぜですか(メソッド/変数などが多すぎることが1つの理由かもしれませんが、.NETには、このルールに違反する他のクラスがあります)。

ありがとう。

回答:


242

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は要求全体をより詳細に制御する必要がある場合に適しています。


34
上記は事実であり、以下は意見です:HttpWebRequestが壊れているため、どちらもひどいです。これは基本的な認証を間違って処理し、などの奇妙な回避策を必要としServicePointManager.Expect100Continue = false、他の非標準的なことを行い、多くの癖と特異性を持っています。これらの問題を解決するためにRestSharpを起動しました。
John Sheehan、2011

4
また、WebClientはコンポーネントであるため、VSツールウィンドウからフォームにドラッグアンドドロップして、そこで使用できることにも注意してください。
フェローゼ

1
少し前に、基本認証でhttpwebrequestを使用しようとしたと思います。私はそれに同意することができます。RestSharpを作成しましたか?涼しい!
GurdeepS、2011

19
私が今持っているように、この出くわす誰でも、ノートは呼ばれるフィールドに新しいプレーヤーがありHttpClient...(?かない場合があります)上記の激論のいくつかを解決するかもしれない、.NET 4.5が付属しています
粉化

3
WebClientはIDisposableを実装しているため、実装を検討する必要がありますusing (WebClient client = new WebClient())
Eric

32

また、WebClientにはタイムアウトプロパティがありません。dafault値が100秒であり、インターネット接続がないかどうかを示すには多すぎるため、これが問題です。

その問題の回避策はこちらですhttps://stackoverflow.com/a/3052637/1303422


16
質問は違いは何でしたか。違いの1つは、HttpWebRequestにはあるが、WebClientにはタイムアウトプロパティがないことです。
Andriy F. 14

26

私は返信が長すぎることを知っていますが、将来の読者のための情報目的としてのみです。

WebRequest

System.Object
    System.MarshalByRefObject
        System.Net.WebRequest

WebRequest抽象基本クラスです。したがって、実際には直接使用しません。派生クラス- HttpWebRequestとを使用しFileWebRequestます。

のCreateメソッドを使用WebRequestして、のインスタンスを作成しますWebRequestGetResponseStreamを返しますdata stream

からのクラスもFileWebRequestありFtpWebRequestます。通常、を使用して、リクエストを作成し、そのリクエストに応じて戻り値を、またはに変換します。以下に例を示します。inheritWebRequestWebRequestHttpWebRequestFileWebRequestFtpWebRequest

例:

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によって識別されるリソースに対する一般的な操作sendingreceivingデータを提供します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ください。したがって、エンコードと指定しないと、おそらく奇妙な文字を受け取ることになります。

注: 基本的に、「WebClientWebrequestと比較して数行のコードを必要とします


WebClientクラスはPost / Getメソッドを使用しますか?説明するリンクを提供してください
Kartiikeya 2016

WebRequestを使用すると、リクエストメソッドタイプ、つまりプロパティMETHODを使用したGet / Postを追加できます。WebClientには、機能を追加するメソッドタイプはありません。
SHEKHAR SHETE

1
@SHEKHARSHETE webClient.UploadData(url, "POST", bytes)メソッドの指定に使用できました(MSDNドキュメントを参照)。
Jeff B
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.