첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
------------------------------------------------------------------------------------------------------------------------------------------------------
728x90
728x170

■ WebClient 클래스를 사용해 쿠키 컨테이너를 갖는 웹 클라이언트를 만드는 방법을 보여준다.

 

▶ 예제 코드 (C#)

using System;
using System.Net;

/// <summary>
/// 커스텀 웹 클라이언트
/// </summary>
public class CustomWebClient : WebClient
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Field
    ////////////////////////////////////////////////////////////////////////////////////////// Private

    #region Field

    /// <summary>
    /// 쿠키 컨테이너
    /// </summary>
    private CookieContainer cookieContainer = new CookieContainer();

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 쿠키 컨테이너 - CookieContainer

    /// <summary>
    /// 쿠키 컨테이너
    /// </summary>
    public CookieContainer CookieContainer
    {
        get
        {
            return this.cookieContainer;
        }
        set
        {
            this.cookieContainer = value;
        }
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 생성자 - CustomWebClient(cookieContainer)

    /// <summary>
    /// 생성자
    /// </summary>
    /// <param name="cookieContainer">쿠키 컨테이너</param>
    public CustomWebClient(CookieContainer cookieContainer)
    {
        this.cookieContainer = cookieContainer;
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Protected

    #region 웹 요청 구하기 - GetWebRequest(uri)

    /// <summary>
    /// 웹 요청 구하기
    /// </summary>
    /// <param name="uri">URI</param>
    /// <returns>웹 요청</returns>
    protected override WebRequest GetWebRequest(Uri uri)
    {
        WebRequest webRequest = base.GetWebRequest(uri);

        HttpWebRequest httpWebRequest = webRequest as HttpWebRequest;

        if(httpWebRequest != null)
        {
            httpWebRequest.CookieContainer = this.cookieContainer;
        }

        return webRequest;
    }

    #endregion
    #region 웹 응답 구하기 - GetWebResponse(webRequest)

    /// <summary>
    /// 웹 응답 구하기
    /// </summary>
    /// <param name="webRequest">웹 요청</param>
    /// <returns>웹 응답</returns>
    protected override WebResponse GetWebResponse(WebRequest webRequest)
    {
        WebResponse webResponse = base.GetWebResponse(webRequest);

        AddCookieCollection(webResponse);

        return webResponse;
    }

    #endregion
    #region 웹 응답 구하기 - GetWebResponse(webRequest, asyncResult)

    /// <summary>
    /// 웹 응답 구하기
    /// </summary>
    /// <param name="webRequest">웹 요청</param>
    /// <param name="asyncResult">비동기 결과</param>
    /// <returns>웹 응답</returns>
    protected override WebResponse GetWebResponse(WebRequest webRequest, IAsyncResult asyncResult)
    {
        WebResponse webResponse = base.GetWebResponse(webRequest, asyncResult);

        AddCookieCollection(webResponse);

        return webResponse;
    }

    #endregion

    ////////////////////////////////////////////////////////////////////////////////////////// Private

    #region 쿠키 컬렉션 추가하기 - AddCookieCollection(webResponse)

    /// <summary>
    /// 쿠키 컬렉션 추가하기
    /// </summary>
    /// <param name="webResponse">웹 응답</param>
    private void AddCookieCollection(WebResponse webResponse)
    {
        HttpWebResponse httpWebResponse = webResponse as HttpWebResponse;

        if(httpWebResponse != null)
        {
            CookieCollection cookieCollection = httpWebResponse.Cookies;

            this.cookieContainer.Add(cookieCollection);
        }
    }

    #endregion
}
728x90
그리드형(광고전용)
Posted by icodebroker
,