.NET WebClient
의 HttpWebRequest
클래스 와 클래스 의 차이점은 무엇입니까 ? 둘 다 매우 비슷한 일을합니다. 실제로 왜 하나의 클래스로 병합되지 않았습니까 (너무 많은 메소드 / 변수 등이 한 가지 이유 일 수 있지만 .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
추상 기본 클래스입니다. 따라서 실제로 직접 사용하지 마십시오. 파생 클래스를 통해 사용합니다- HttpWebRequest
및 FileWebRequest
.
의 메소드 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();
웹 클라이언트
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 와 비교하여 몇 줄의 코드를 사용합니다 “