2010-03-19 6 views
0

언어 : C#
개발 환경 : Visual Studio를 내가 웹 사이트에 로그인하고 거기에서 일부 데이터를 얻으려면 2008로그인 웹 사이트, 호기심 쿠키 문제

. 내 문제는 쿠키가 작동하지 않는다는 것입니다. 웹 사이트에서는 쿠키를 활성화해야한다고 말하면서 Cookiecontainer 쿠키를 활성화했습니다.

나는 로그인 진행을 위해 여러 번 트래픽을 스니핑했는데 아무런 문제가 없습니다.

로그인 페이지는 ... 내가 로그인하는 다른 방법을 시도하고 다른 사람이 문제가 있지만 결과가 있다면 내가 검색 한 "www.uploaded.to"여기에 약식으로 로그인 내 코드는 다음과 같습니다

지금
 private void login() 
     { 
     //Global CookieContainer for all the Cookies 
     CookieContainer _cookieContainer = new CookieContainer(); 

     //First Login to the Website 
     HttpWebRequest _request1 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login"); 
     _request1.Method = "POST"; 
     _request1.CookieContainer = _cookieContainer; 

     string _postData = "email=XXXXX&password=XXXXX"; 
     byte[] _byteArray = Encoding.UTF8.GetBytes(_postData); 

     Stream _reqStream = _request1.GetRequestStream(); 

     _reqStream.Write(_byteArray, 0, _byteArray.Length); 
     _reqStream.Close(); 

     HttpWebResponse _response1 = (HttpWebResponse)_request1.GetResponse(); 
     _response1.Close(); 


     //######################## 

     //Follow the Link from Request1 
     HttpWebRequest _request2 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login?coo=1"); 
     _request2.Method = "GET"; 
     _request2.CookieContainer = _cookieContainer; 

     HttpWebResponse _response2 = (HttpWebResponse)_request2.GetResponse(); 
     _response2.Close(); 


     //####################### 

     //Get the Data from the Page after Login 
     HttpWebRequest _request3 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/home"); 
     _request3.Method = "GET"; 
     _request3.CookieContainer = _cookieContainer; 

     HttpWebResponse _response3 = (HttpWebResponse)_request3.GetResponse(); 
     _response3.Close(); 

     } 

나는 몇 주 이후이 문제에 붙어있어 그리고 난 내가 다시 시도했습니다 도와주세요, 작동 해결책 ...


, 첫 번째 요청 작업 (로그인)을 찾을 수 없습니다 . 나는 인증을받은 쿠키를 얻는다. 응답 텍스트는 URL : http://uploaded.to/login?coo=1입니다. 이제이 URL에 대해 GET 요청을해야합니다. 그러나 문제는 Wireshark를 사용하여이 요청에서 쿠키를 전송하지 않습니다. 쿠키에 httpwebrequest 문제가 있습니까?

내 코드 :

CookieContainer _cookieContainer = new CookieContainer(); 

     //First Login to the Website 
     HttpWebRequest _request1 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login"); 
     _request1.Method = "POST"; 
     _request1.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
     _request1.AllowAutoRedirect = false; 
     _request1.CookieContainer = _cookieContainer; 
     _request1.ContentType = "application/x-www-form-urlencoded"; 
     _request1.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)"; 
     _request1.Headers.Add(HttpRequestHeader.CacheControl, "no-cache=set-cookie"); 

     string _postData = "email=XXXXX&password=XXXXXX"; 
     byte[] _byteArray = Encoding.UTF8.GetBytes(_postData); 
     _request1.ContentLength = _byteArray.Length; 

     Stream _reqStream = _request1.GetRequestStream(); 
     _reqStream.Write(_byteArray, 0, _byteArray.Length); 
     _reqStream.Close(); 



     HttpWebResponse _response1 = (HttpWebResponse)_request1.GetResponse(); 
     StreamReader _reader1 = new StreamReader(_response1.GetResponseStream()); 
     CookieCollection _cookieCollection = new CookieCollection(); 
     foreach (Cookie _cook in _response1.Cookies) 
     { 
      _cookieCollection.Add(_cook); 
     } 
     wbrowser_html.DocumentText = _reader1.ReadToEnd(); 

     _response1.Close(); 
     _reader1.Close(); 

     //######################## 

     HttpWebRequest _request2 = (HttpWebRequest)WebRequest.Create("http://uploaded.to/login?coo=1"); 
     _request2.Method = "GET"; 
     _request2.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
     _request2.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)"; 
     _request2.Referer = "http://uploaded.to/login"; 
     _request2.KeepAlive = true; 

     //Here I set the language and the auth cookie, works fine 
     _request2.CookieContainer = _cookieContainer; 
     _request2.CookieContainer.Add(_cookieCollection); 
     _request2.Headers.Add(HttpRequestHeader.CacheControl, "no-cache=set-cookie"); 

     HttpWebResponse _response2 = (HttpWebResponse)_request2.GetResponse(); 
     StreamReader _reader2 = new StreamReader(_response2.GetResponseStream()); 
     wbrowser_html.DocumentText = _reader2.ReadToEnd(); 

     _response2.Close(); 
     _reader2.Close(); 

그리고 지금은 Wireshark를 확인하고 두 번째 요청에는 쿠키가없는 참조합니다. 요청에 추가했지만 어쨌든 그들은 서버에 보내지 않았습니다 ??

누구든지이 문제를 해결할 생각이 있으십니까?

답변

0

왜 WebClient 클래스를 사용하지 않습니까?

NameValueCollection loginData = new NameValueCollection(); 
loginData.Add("email", "your_email"); 
loginData.Add("password", "your_password"); 

WebClient client = new WebClient(); 
string source = Encoding.UTF8.GetString(client.UploadValues("http://uploaded.to/login", loginData)); 
string cookie = client.ResponseHeaders["Set-Cookie"]; 
client.Headers["Cookie"] = cookie; 

source = client.DownloadString("http://uploaded.to/some-page"); 
+0

동일합니다. 귀하의 코드를 시도해도 프로그램이 로그인하지 않으면 수신 한 쿠키는 언어 쿠키와 인증 쿠키가 아닙니다. 코드를 약간 변경하면 웹 사이트에 쿠키가 활성화되어 있지 않다는 메시지가 다시 나타납니다. 웹 사이트에 로그인하면 정상적으로 매우 쉽게 물마루가되지만이 웹 사이트에서는 매우 어렵습니다. 문제가 어디에 있는지 알지 못합니다. –