2011-12-16 2 views
2

쿠키를 사용하는 웹 사이트에 연결하려고합니다. 내 로그인은 다음과 같습니다 :쿠키 검색 및 설정

 private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseurl); 

      req.Referer = referer; 
      req.AllowAutoRedirect = true; 
      req.KeepAlive = true; 
      req.Method = "POST"; 
      req.ContentType = "application/x-www-form-urlencoded"; 
      byte[] postbuf = Encoding.ASCII.GetBytes(login); 
      req.ContentLength = postbuf.Length; 
      Stream rs = req.GetRequestStream(); 
      rs.Write(postbuf, 0, postbuf.Length); 
      rs.Close(); 

      cookie = req.CookieContainer = new CookieContainer(); 

      WebResponse resp = req.GetResponse(); 

      string s = ""; 
      foreach (Cookie c in cookie.GetCookies(req.RequestUri)) 
      { 
       s += ("Cookie['" + c.Name + "']: " + c.Value); 
      } 
      textBox1.Text = s; 

      resp.Close(); 
     } 
     catch (Exception ex) 
     { 
      System.Diagnostics.Debug.WriteLine(ex); 
     } 
    } 

쿠키에는 값이있는 2 개의 키가 있습니다. 그런 다음 웹 사이트에 다음과 같이 게시물 요청을 보내려고합니다.

 private void button2_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(search); 

      req.Referer = referer; 
      req.AllowAutoRedirect = true; 
      req.KeepAlive = true; 
      req.CookieContainer = cookie; 
      StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream()); 

      if (reader != null) 
      { 
       string data = reader.ReadToEnd(); 
       reader.Close(); 

       textBox1.Text = data; 
      } 
     } 
     catch (Exception ex) 
     { 
      System.Diagnostics.Debug.WriteLine(ex); 
     } 
    } 

그러나 인증 할 수 없다는 오류가 발생합니다. firefox를 사용하여 로그인하면 쿠키에 더 많은 항목이 포함되어 있습니다.

내 코드가 잘못되었습니다.

+0

: cookie 이후

당신이 스트림을 기록하기 전에 전역 변수는 한 번만 초기화가 선언 어디에 예를 들어 말을하고 설정인가? – TheBoyan

+0

제목에 "C#"을 넣지 마십시오. 이것이 바로 태그가있는 것입니다. – Amy

+0

@Bojan : 아니요 –

답변

1

나는 당신의 실수가 다음 줄에 있다고 생각 : 당신이 요청 스트림을 작성 후 새 쿠키 컨테이너마다 시간을 인스턴스화하는

cookie = req.CookieContainer = new CookieContainer(); 

. 첫 번째 응답이 .ASPXAUTH 쿠키이 포함되어 있습니까

req.CookieContainer = cookie; 
rs.Write(postbuf, 0, postbuf.Length); 
+0

코드를 변경 했으므로 로그인이 성공적으로 완료되었음을 확인할 수 있습니다. 그러나 웹 사이트에 대한 후속 호출은 쿠키를 설정하더라도 "couldnt authenticate"를 반환합니다. –

+0

@ Ivan-MarkDebono - 이후의 호출에서 코드의 다른 위치에서 CookieContainer를 새 CookieContainer()로 설정 하시겠습니까? CookieContainer는 로그인 쿠키가 있기 때문에 이전 쿠키 컨테이너를 추적해야합니다. 일단 당신이 그것을 새 것으로 설정하면 이전의 모든 것을 잃어 버리게됩니다. – TheBoyan