//로그인에 필요한 데이터...
string postData = "a=124&b=344";
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("데이터를 전송할 URI");
//인코딩은 서버에서 처리하고 있는 인코딩으로 지정해주세요.
//대부분의 사이트는 Defalt 혹은 euc-kr로 하면 되는 것 같습니다.
byte[] byteArray = Encoding.GetEncoding("ks_c_5601").GetBytes(postData);
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.ContentLength = byteArray.Length;
httpWebRequest.CookieContainer = new CookieContainer();
//저장된 쿠키콜렉션이 있을 경우에는 쿠키를 포함해서 전송한다.
if (_CookieContainer.ContainsKey(txtID.Text))
httpWebRequest.CookieContainer.Add(_CookieContainer[txtID.Text]);
Stream stream = httpWebRequest.GetRequestStream();
stream.Write(byteArray, 0, byteArray.Length);
stream.Close();
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
//로그인 후 서버로부터 받은 쿠키콜렉션을 특정 자료구조에 저장해 놓았다가
//로그인 후의 페이지를 요청하게 될 때 사용한다.
if (!_CookieContainer.ContainsKey(txtID.Text))
_CookieContainer.Add(txtID.Text, httpWebResponse.Cookies);
else
{
//로그인 후에 다른 페이지를 접속했을 경우
//쿠키를 추가하게 되는 경우가 있으므로
//이럴 때는 기존에 갖고 있던 쿠키에 추가하고
//자료 구조에 저장해놓는다.
CookieCollection coo = _CookieContainer[txtID.Text];
coo.Add(httpWebResponse.Cookies);
_CookieContainer[txtID.Text] = coo;
}
Stream responseStream = httpWebResponse.GetResponseStream();
//받을 때도 마찬가지로 서버에서 전송해주는 인코딩 방식으로 읽어주세요
StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("ks_c_5601"));
string resultString = streamReader.ReadToEnd();
Console.WriteLine(resultString);
//전송 데이터, URI, 수신 데이터 등의 자료는 이더리얼이라는 프로그램을 사용하시면 편합니다.
[출처] [스크랩핑] 특정 사이트 로그인해서 문서 가져오기. |작성자 코달
'Program > C#' 카테고리의 다른 글
[STAThreadAttribute] 단일 스레드 아파트 모드 설정. (0) | 2010.03.19 |
---|---|
C# WebBrowser 컨트롤의 로딩완료(DocumentCompleted) 알아내기 (0) | 2010.03.19 |
타임서버 데이타 취하기 (0) | 2010.03.19 |
Delegate [대리자] 기본 개념과 사용법 (0) | 2010.03.07 |
닷넷 응용 프로그램의 설치 및 배포 #2 (0) | 2010.03.07 |