본문 바로가기

Projects/CoRapport

[HttpWebRequest] 닷넷 응용프로그램에서 쿠키로 인증된 세션을 사용

닷넷에서 쿠키로 인증된 세션유지하기 :

http://ttjkim.egloos.com/5455842
http://mihye.tistory.com/tag/CookieContainer --> 이 링크에서 보여주는 6번째 문장 다음에 CookieContainer 객체를 HttpWebRequest 객체의 CookieContainer 필드에 넣어줘야  정상적으로 동작할 것입니다.
즉 아래 소스의 붉은색 부분을 추가해줘야 합니다...


 

string repURL = "http://이미지주소.jpg";  
string weburl = "http://게시판주소.php";

/// Call Web Request   
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(weburl);  

//이부분에 다음과 같이 해줘야 할 것이다.
req.CookieContainer = new CookieContainer();

/// Read the content.  
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();                            

req = (HttpWebRequest)WebRequest.Create(repURL);  
req.CookieContainer = new CookieContainer(); /// 쿠키를 동일하게 해줍니다.  
req.CookieContainer.Add(resp.Cookies);  
req.Method = "GET"; /// GET방식으로 바꾸어 줍니다. (POST로 할 시 HTTP 403 Error 발생합니다.)                   

/// Read the content.  
WebResponse res = req.GetResponse();  
Image img = Image.FromStream(res.GetResponseStream());  
img.Save("special.bmp"); /// 받아온 이미지 저장 


 

왜냐하면 쿠키 컨테이너 객체가 생성되지 않은 상태에서 response 객체의 쿠키정보를 정상적으로 저장하지 못하기 때문입니다.

또한 HttpWebResponse 객체에 응답을 저장하고 작업을 완료했으면 close 메서드를 사용해서 스트림을 꼭 닫아줘야합니다. resp.Close() 이런식으로... 안그러면 어떤 경우에는 응답을 제대로 받지 못하는 WebException이 발생할 것입니다....
데이터베이스 쿼리랑 결과 받아오는 곳과 같은 소켓 + 스트림을 다루면 열었으면 닫는다는 생각을 항상하고 있는데
C 수업시간에도 파일입출력 가르쳐주면서 항상 강조했는데
이런 실수로 1~2시간을 낭비하다니 참... 서글픕니다...