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

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시간을 낭비하다니 참... 서글픕니다...

신고

http://hc.apache.org/index.html

OverView

The Hyper-Text Transfer Protocol (HTTP) is perhaps the most significant protocol used on the Internet today. Web services, network-enabled appliances and the growth of network computing continue to expand the role of the HTTP protocol beyond user-driven web browsers, while increasing the number of applications that require HTTP support.

Designed for extension while providing robust support for the base HTTP protocol, the HttpComponents may be of interest to anyone building HTTP-aware client and server applications such as web browsers, web spiders, HTTP proxies, web service transport libraries, or systems that leverage or extend the HTTP protocol for distributed communication.

신고