4

웹 브라우저 컨트롤을 사용하여 웹 사이트를 열고 쿠키를 cookieContainer에 저장 한 다음 HTTP 브라우징을 사용하여 앞으로 탐색 페이지 등을 처리합니다.쿠키 컨테이너에서 쿠키를 제거/업데이트하는 방법 C#?

검색을하면 첫 페이지에 100 페이지가 반환됩니다. 그것은 ABC라고 이름 붙여진 쿠키를 저장하고 두 번째 페이지에서 다음 페이지로 다시 이동합니다. 동일한 쿠키 : ABC에 약간의 값이 주어졌지만 지금은 cookiecontainer에 두 개의 동일한 쿠키가 있고 이동하면 다음 페이지로 가면 작동하지 않습니다. 모든 것을 망쳐 놓은 첫 번째 쿠키를 사용합니다.

해결 방법?

의 HttpWebRequest 기능 :

public string getHtmlCookies(string url) 
    { 
     string responseData = ""; 
     try 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
      request.Accept = "*/*"; 
      request.AllowAutoRedirect = true; 
      request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"; 
      request.Timeout = 30000; 
      request.Method = "GET"; 
      request.CookieContainer = yummycookies; 

      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      if (response.StatusCode == HttpStatusCode.OK) 
      { 
       foreach (Cookie cookie in response.Cookies) 
       { 
        string name = string.Empty; 
        name = cookie.Name; 
        string value = cookie.Value; 
        string path = "/"; 
        string domain = "www.example.com"; 
        yummycookies.Add(new Cookie(name.Trim(), value.Trim(), path, domain)); 

       } 


       Stream responseStream = response.GetResponseStream(); 
       StreamReader myStreamReader = new StreamReader(responseStream); 
       responseData = myStreamReader.ReadToEnd(); 
      } 
      response.Close(); 


     } 
     catch (Exception e) 
     { 
      responseData = "An error occurred: " + e.Message; 
     } 

     return responseData; 

    } 
+0

같은 것을 다시 응답을 얻을 때, 그들은 yummycookies에 추가 얻을 것이다 (것 –

+0

내가 추가하지 않으면 1 페이지에서 2 페이지로 이동하지 않습니다. – confusedMind

+0

yummyCookie는 로그인 정보를 포함하고 나중에 1 페이지의 쿠키를 포함하고 2 페이지에 쿠키를 가져 오기로되어 있습니다. 충돌하는 페이지 1과 동일한 이름. – confusedMind

답변

5

당신은 SetCookies 방법을 사용할 수 있습니다.

var container = new System.Net.CookieContainer(); 
var uri = new Uri("http://www.example.com"); 
container.SetCookies(uri,"name=value"); 
container.SetCookies(uri,"name=value1"); 

Value=value1와 함께 하나의 쿠키를 줄 것이다 GetCookies(uri)를 호출.

그리고 귀하의 경우

, 코드는만큼 당신은 명시 적으로 응답에서 쿠키를 추가 할 필요가 없습니다

var uri = new Uri("http://www.example.com"); 
yummycookies.SetCookies(uri, response.Headers[HttpResponseHeader.SetCookie]);