C #에서 HTML 소스를 다운로드하려면 어떻게해야합니까?


109

C #에서 웹 주소가 주어진 HTML 소스를 어떻게 얻을 수 있습니까?

답변:


185

WebClient 클래스를 사용하여 파일을 다운로드 할 수 있습니다 .

using System.Net;

using (WebClient client = new WebClient ()) // WebClient class inherits IDisposable
{
    client.DownloadFile("http://yoursite.com/page.html", @"C:\localfile.html");

    // Or you can get the file content without saving it
    string htmlCode = client.DownloadString("http://yoursite.com/page.html");
}

참고 : 더 많은 제어가 필요한 경우 HttpWebRequest 클래스 (예 : 인증 지정 가능)를 살펴보십시오.
Richard

1
예, HttpWebRequest는 더 많은 제어를 제공하지만 client.UploadData (uriString, "POST", postParamsByteArray);를 사용하여 WebClient로 POST 요청을 수행 할 수 있습니다.
CMS

1
이 주위에 WebException을 잡는 것이 현명하지 않습니까? 아마도 그것은 가정되었을 것입니다. 이 방법으로 다른 예외 나 오류를 포착해야합니까?
John Washam

4
@JohnWasham-예, 여기에서 예외를 포착하는 것이 현명 할 것입니다. 그러나 고맙게도 대부분의 StackOverflow 응답자는 예제 코드를 가능한 한 명확하고 간결하게 유지합니다. 예제 코드를 "실제 생활"에 더 가깝게 만들면 노이즈가 추가됩니다.
크리스 로저스

문제의 난 얼굴입니다 해당 웹 사이트가 다른 언어에있는 경우 내가 pagesource를 다운로드하고보다 데이터를 얻을 때 내 pagesource 그 값을받지보다
Rush.2707

40

원래:

using System.Net;
using System.Net.Http;  // in LINQPad, also add a reference to System.Net.Http.dll

WebRequest req = HttpWebRequest.Create("http://google.com");
req.Method = "GET";

string source;
using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream()))
{
    source = reader.ReadToEnd();
}

Console.WriteLine(source);

19

최신, 가장 최근의 최신 답변
이 게시물은 정말 오래되었으므로 (내가 답변했을 때 7 년이되었습니다) 다른 답변 중 어느 누구도 새롭고 권장되는 방식 인 HttpClient수업을 사용하지 않았습니다 .


HttpClient새 API로 간주되며 이전 API ( WebClientWebRequest)를 대체해야합니다.

string url = "page url";
HttpClient client = new HttpClient();
using (HttpResponseMessage response = client.GetAsync(url).Result)
{
   using (HttpContent content = response.Content)
   {
      string result = content.ReadAsStringAsync().Result;
   }
}

HttpClient클래스 사용 방법에 대한 자세한 내용은 (특히 비동기 경우) 이 질문을 참조하십시오.


4
제안 : 비동기 메서드를 기다립니다.
Maarten

다음 링크를 보여줍니다 @Maarten이와 비동기 / await를 사용하는 방법 stackoverflow.com/questions/33020657/...
하칸 Fıstık

17

다음과 같이 얻을 수 있습니다.

var html = new System.Net.WebClient().DownloadString(siteUrl)

짧고 달다! Joe Albahari의 예를 읽은 후에 제안을 찾았습니다. LINQPad> 도움말> 새로운 기능, 캐시를 검색합니다.
콜린

7
var html = new System.Net.WebClient (). DownloadString (siteUrl); // 새로운 클라이언트가 필요합니다!
user1328350 2014-08-11

9
그합니까 DisposeWebClient?
JD

11

@cms 방법은 MS 웹 사이트에서 제안한 최신 버전이지만 두 가지 방법 모두 여기에 게시되어 해결하기 어려운 문제가 있었으므로 이제 모두를위한 솔루션을 게시합니다!

문제 : 다음 과 같은 URL을 사용하는 www.somesite.it/?p=1500경우 : 어떤 경우에는 내부 서버 오류 (500)가 발생하지만 웹 브라우저에서는 www.somesite.it/?p=1500완벽하게 작동합니다.

솔루션 : 매개 변수를 이동해야합니다. 작업 코드는 다음과 같습니다.

using System.Net;
//...
using (WebClient client = new WebClient ()) 
{
    client.QueryString.Add("p", "1500"); //add parameters
    string htmlCode = client.DownloadString("www.somesite.it");
    //...
}

여기 공식 문서

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.