WebClient 활용
웹 서버에서 데이타를 가져오거나 웹 서버로 데이타를 보내기 위해 간단한 유틸러티 클래스인 WebClient 클래스를 사용할 수 있다.
WebClient 클래스는 System.Net 네임스페이스에 있는 클래스인데, 이 클래스는 크게 다음과 같은 4 종류의 기능을 제공한다.
(1) 데이타를 가져오기 위해 여러 Download* 메서드들
(2) 데이타를 보내기 위한 여러 Upload* 메서드들
(3) 데이타를 스트림 형태로 읽어오기 위한 OpenRead* 메서드들
(4) 데이타를 스트림 형태로 쓰기 위한 OpenWrite* 메서드들
WebClient 다운로드
WebClient로 웹 서버에서 HTML이나 문자열을 다운로드 받기 위해서는 DownloadString() 메서드를 사용하면 된다.
아래 예제는 구글 홈페이지 HTML을 동기적 방식으로 다운로드 받는 코드이다.
string url = "http://www.google.com";
WebClient webClient = new WebClient();
string html = webClient.DownloadString(url);
만약 비동기적 방식으로 HTML이나 문자열을 다운로드 받기 위해서는 DownloadStringTaskAsync() 메서드를 사용하고 await 하면 된다.
string url = "http://www.google.com";
WebClient webClient = new WebClient();
string html = await webClient.DownloadStringTaskAsync(url);
Console.WriteLine(html);
WebClient로 텍스트가 아닌 바이너리 데이타를 다운로드 받기 위해서는 DownloadData (동기적) 혹은
DownloadDataTaskAsync(비동기적) 메서드를 사용하면 된다.
또한, 웹 서버에서 파일을 다운 받기 위해서는 아래 예제처럼 DownloadFile (동기적) 혹은 DownloadFileTaskAsync (비동기적) 메서드를
사용한다.
string output = @"C:\Temp\robots.txt";
WebClient wc = new WebClient();
wc.DownloadFile("https://httpbin.org/robots.txt", output);
WebClient 업로드
WebClient로 문자열을 보내기 위해서는 UploadString(동기) 혹은 UploadStringTaskAsync(비동기) 메서드를 사용한다.
텍스트가 아닌 바이너리 데이타를 업로드하기 위해서는 UploadData (동기적) 혹은 UploadDataTaskAsync(비동기적) 메서드를 사용하며,
파일을 업로드하기 위해서는 UploadFile (동기적) 혹은 UploadFileTaskAsync (비동기적) 메서드를 사용한다.
아래는 WebClient을 사용하여 파일을 업로드하는 예제이다. 파일을 업로드하거나 다운로드할 때, 일반적으로 사용자 인증 정보를 요구하는데
아래 예제에서는 헤더에 Authorization 코드를 넣고 업로드를 호출하였다. (주: 웹서버의 구현에 따라 각기 다른 방식으로 인증 정보를 보냄)
string url = "http://test.com/upload"; // 변경요
string infile = @"C:\Temp\test.csv";
WebClient wc = new WebClient();
wc.Headers.Add("Authorization: BASIC SGVsbG8="); //가상의 인증
wc.UploadFile(url, infile);