'cookieawarewebclient'에 해당되는 글 1건

  1. 2011.11.11 [wp7] WCF Rest 에서 Cookie값 받아오기(WCF Login Server Session) 1
Windows Phone 72011. 11. 11. 15:27

아… 대단하다 이것 때문에 하루종일 샤워 할때도.. 꿈꿀때도 아침에 일어날때도 계속 이것을 어떻게 해결해야하나 싶었다.

현재 윈폰용 코레일 앱을 만드는데 EUC-KR에 이어 난항을 겪었다.

사건의 발단은 이렇다.

코레일에서 Rest Sevice를 이용해서 XML등을 읽어와서 파싱하는데

예약 현황 같은것은 로그인을 해야만 가능한것이였다.

웹에서를 예로 들면

로그인 인증 페이지 URL을 접속 해야만 예약 현황을 볼수 있는 페이지를 볼수 있었다.

만약 로그인 인증 페이지 URL을 먼저 접속하지 않으면 예약 현황 페이지에서는 로그인을 해야만 볼수 있다라고 뜬다.

그래서 내가 한방법은 Webclient를 이용해서 로그인 인증 페이지를 먼저 접속 후 예약 현황 페이지를 다시 호출한것이였다.

하지만 그 방법 역시 작동을 안했다. 구글링을 해서 좀더 로우레벨로 해보기로 하여 HttpWebRequest로도 해보고 아이폰쪽 소스도 보고 별짓을 다 했다.

결국 해결한것은 바로 쿠키였다 철도청 관계자는 서버 세션 유지라고 해서 난 쿠키랑 아무런 관계가 없을줄 알았다. 여기서 시간을 엄청 소비했다.

태규형님에게 도움을 요청했고 비슷한 사례를 하나 찾아주셧다.

http://bytes.com/topic/net/answers/426631-web-service-session-winform-client

결국난 CookieContainer 를 설정해야 한다는것을 깨닫고

Webclient를 override해서 가능하다는것을 깨달았다.

http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/149d545f-b605-4fce-b29a-2bfb1c51fbbe

하지만 그것은 WinForm에서는 작동했지만 윈폰에서는 약간의 보안문제로 다시 수정,보완을 하였다.

결국 성공.. 이틀동안의 삽질에 대한 눈물이 났다. ㅠㅠ

다음은 이틀 동안 고생해서 내가 만든 윈폰7용 소스이다. 이건 진짜 인터넷에 하나도 없다 ㅠㅠ

public class CookieAwareWebClient : WebClient
    {
        private CookieContainer m_container = new CookieContainer();

        [SecuritySafeCritical]
        public CookieAwareWebClient()
        {
        }

        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
                (request as HttpWebRequest).CookieContainer = m_container;
            }
            return request;
        }
    }

사용은 그냥

 _webClient.OpenReadAsync(new Uri(url));  _webClient.OpenReadCompleted 
 
를 사용하였다.             
Posted by 동동(이재동)