■ WebClient 클래스를 사용해 쿠키 컨테이너를 갖는 웹 클라이언트를 만드는 방법을 보여준다.
▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
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 } |