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

.NET WebClientHttpWebRequest클래스 와 클래스 의 차이점은 무엇입니까 ? 둘 다 매우 비슷한 일을합니다. 실제로 왜 하나의 클래스로 병합되지 않았습니까 (너무 많은 메소드 / 변수 등이 한 가지 이유 일 수 있지만 .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간결하게하기 위해 두 예제 의 진술을 모두 생략했습니다. 웹 요청 오브젝트를 올바르게 처리하도록 확실히주의해야합니다.

일반적으로 WebClient는 빠르고 간단한 단순 요청에 적합하며 HttpWebRequest는 전체 요청에 대해 더 많은 제어가 필요한 경우에 적합합니다.


답변

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

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


답변

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

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 와 비교하여 몇 줄의 코드를 사용합니다 “