[C#] WebClient C# 2011. 11. 2. 17:51

WebClient 이용해서 일단 데이터 날리는 방법과 파일 업/다운로드 방식이다.

귀찮아서 창고용으로 하핫~

물론 데이터 전송과 파일 업로드는 웹 구현이 필요하다.

[데이터 전송]

Encoding encode = System.Text.Encoding.GetEncoding("euc-kr");
byte[] result = encode.GetBytes(웹으로 날릴 인자 값);
Uri uri = new Uri(처리 해 줄 웹);
HttpWebRequest wReqFirst = (HttpWebRequest)WebRequest.Create(uri);
wReqFirst.Method = "POST";
wReqFirst.Accept = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.590; .NET CLR 3.5.20706; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
wReqFirst.Method = "POST";
wReqFirst.UserAgent = "웹에 설정한 인증자";
wReqFirst.Headers.Add("trans-user", "");
wReqFirst.ContentType = "application/x-www-form-urlencoded";
wReqFirst.ContentLength = result.Length;
wReqFirst.Headers.Add("trans-key", "");
wReqFirst.Headers.Add("Cookie: 세션="세션값";");//요건 선택 사항 하고 싶은 사람은 하면 됨 ``/ 세션 유지 할 때 이용시 유용 한 느낌~
Stream postDataStream = wReqFirst.GetRequestStream();
postDataStream.Write(result, 0, result.Length);
postDataStream.Close();
HttpWebResponse wRespFirst = (HttpWebResponse)wReqFirst.GetResponse();
Stream respPostStream = wRespFirst.GetResponseStream();
StreamReader readerPost = new StreamReader(respPostStream, encode);
string resultPost = readerPost.ReadToEnd();

[파일 업로드]

HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
webrequest.Accept = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.590; .NET CLR 3.5.20706; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
webrequest.UserAgent = "웹에 설정한 인증자";
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
webrequest.Method = "POST";

헤더  값에 업로드 할 파일 명 등 추가~ 웹에서 구현하기 나름이다.

string postHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
FileStream fileStream = new FileStream(filepath, FileMode.Open, FileAccess.Read);
long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length;
webrequest.ContentLength = length;
Stream requestStream = webrequest.GetRequestStream();
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
          requestStream.Write(buffer, 0, bytesRead);
}
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
WebResponse responce = webrequest.GetResponse();
Stream s = responce.GetResponseStream();

[파일 다운로드]

WebClient webclient = new WebClient();
Uri uri = new Uri(서버 주소 + 다운로드 할 파일 명);
webclient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.590; .NET CLR 3.5.20706; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729;)");
webclient.Credentials = new NetworkCredential("sitemgr", "S2_.T8UJ");
webclient.UseDefaultCredentials = true;
webclient.DownloadFileAsync(uri, 올릴 파일 전체 경로);
while (webclient.IsBusy) { System.Windows.Forms.Application.DoEvents(); System.Threading.Thread.Sleep(1); };

뭐.. 대략 이 정도 인듯?

창고는 쌓아두는게 제맛!!

제때 제때 잘 찾음 MSDN 부럽지 않다 ㅋㅋ

자동 업데이트 만들다가 살짝 만들었다.

데몬을 안띄우고 하면 이게 제일 효율적이다 싶어서 한건데.. 흠..

기능 적으론 나쁘지 않았다.

using System.Runtime.InteropServices;

처리 한 후,

WebClient m_webclient = new WebClient();
m_webclient.Credentials = new System.Net.NetworkCredential("계정", "비번");

처리를 해 준다.

downloader.DownloadFile(new Url("http://해당 경로/해당파일"),"복사 할 파일 경로");

하면 끝!!

항시 서비스하는 웹 사이트가 있다거나 도메인이 있다면 간결하게 하고 좋은 듯 하다!!

그럼 오늘의 포스팅은 여기까지~ 텨~