본문 바로가기

# IT, Computer Science/C#

C# WebRequest 로그인 쿠키저장

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

using System;
using System.Text;
using System.Net;
using System.IO;

namespace HttpWebRequestEx
{
    class Program
    {
        static CookieContainer cookie = new CookieContainer(); // 로그인이 성공하였을때의 세션쿠키값을 가지고 있을 컨테이너
        static void Main(string[] args)
        {
            string id="test"; // 로그인 아이디
            string pw="test"; // 로그인 패스워드
            string sendData = "id=" + id + "&pw=" + pw; // sendData의 부분은 웹사이트마다 요청값이 다릅니다. 때문에 피들러 같은 툴을 이용해서 웹페이지가 어떤 값을 원하는지 정확하게 포멧을 알아야합니다.

            string result = RequestWebPage("http://www.naver.com", sendData, cookie);

            Console.WriteLine(result);
        }

        public static string RequestWebPage(string url, string sendData, CookieContainer cook)
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); // 웹 요청 객체 생성

            // 헤더 정의부분 입니다. (웹페이지에 따라 요청 헤더문이 틀릴수도 있습니다만.. 보통 이런식입니다.)
            req.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)";
            req.Method = "POST";
            req.ContentLength = sendData.Length;
            req.ContentType = "application/x-www-form-urlencoded";
            req.KeepAlive = true;

            req.CookieContainer = cook; // 중요 => 세션쿠키 (로그인이 성공하면 이 코드로 인해 세션이 유지가 됨.)

            StreamWriter writer = new StreamWriter(req.GetRequestStream()); // 실제 요청
            writer.Write(sendData); // 요청할때 헤더및 값을 보냄
            writer.Close();

            HttpWebResponse result = (HttpWebResponse)req.GetResponse(); // 요청 결과 값 받아옴.

            // 요청이 성공적이면..
            if (result.StatusCode == HttpStatusCode.OK)
            {
                Encoding encode = Encoding.GetEncoding("utf-8");
                Stream strReceiveStream = result.GetResponseStream();
                StreamReader reqStreamReader = new StreamReader(strReceiveStream, encode);

                string strResult = reqStreamReader.ReadToEnd(); // 데이터를 읽어온다.

                req.Abort();
                strReceiveStream.Close();
                reqStreamReader.Close();

                return strResult;
            }
            else
            {
                Console.WriteLine("Error");
                return "ERR";
            }
        }
    }
}





'# IT, Computer Science > C#' 카테고리의 다른 글

App.Config XML파일을 읽고 쓰는 간단한 함수  (0) 2012.07.14
App.config  (0) 2012.01.30