.NET에서 WebClient와 HTTPWebRequest 클래스 사이에는 어떤 차이점이 있습니까?


178

.NET WebClientHttpWebRequest클래스 와 클래스 의 차이점은 무엇입니까 ? 둘 다 매우 비슷한 일을합니다. 실제로 왜 하나의 클래스로 병합되지 않았습니까 (너무 많은 메소드 / 변수 등이 한 가지 이유 일 수 있지만 .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 2019

4
또한 WebClient는 구성 요소이므로 VS 도구 창에서 양식으로 끌어서 놓아 사용할 수 있습니다.
feroze

1
나는 얼마 전에 기본 인증으로 httpwebrequest를 사용하려고했다고 생각합니다. 동의 할 수 있습니다. 그래서 당신은 RestSharp를 만들었습니까? 멋있는!
GurdeepS

19
내가 지금했던 것처럼이 문제를 겪고있는 사람이라면 누구나 HttpClient.NET 4.5와 함께 제공 되는 필드 에 위와 같은 번거 로움을 해결할 수 있는 새로운 플레이어 가 있습니다.
Funka

3
WebClient는 IDisposable을 구현하므로 고려해야합니다using (WebClient client = new WebClient())
Eric

32

또한 WebClient에는 시간 초과 속성이 없습니다. dafault 값이 100 초이고 인터넷에 연결되어 있지 않은지를 나타내기에는 너무 많기 때문에 이것이 문제입니다.

그 문제에 대한 해결책은 여기 https : //.com/a/3052637/1303422


16
질문은 차이점이 무엇입니까? 차이점 중 하나는 WebClient에는 시간 초과 속성이 없지만 HttpWebRequest에는 없습니다.
Andriy F.

26

답장하기에는 너무 길지만 미래 독자를위한 정보 목적으로 알고 있습니다.

WebRequest

System.Object
    System.MarshalByRefObject
        System.Net.WebRequest

WebRequest추상 기본 클래스입니다. 따라서 실제로 직접 사용하지 마십시오. 파생 클래스를 통해 사용합니다- HttpWebRequestFileWebRequest.

의 메소드 WebRequest를 사용하여의 인스턴스를 만듭니다 WebRequest. GetResponseStream을 반환합니다 data stream.

이 또한 FileWebRequestFtpWebRequest클래스 그 inherit에서 WebRequest. 일반적으로, 사용하는 것이 WebRequest, 음,에 요청을하고 하나의 반환을 변환 HttpWebRequest, FileWebRequest또는 FtpWebRequest귀하의 요청에 따라 달라집니다. 아래는 예입니다.

예:

var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com");
var _response = (HttpWebResponse)_request.GetResponse();

웹 클라이언트

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 Method ..를 사용합니까? 설명을위한 링크를 제공해주세요
Kartiikeya

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.