2011-03-08 1 views
1

httpwebrequest 개체를 사용하여 www.diary.com에 로그인하려고합니다. 그러나 항상 로그인에 실패하고 로그인 페이지를 다시 제공합니다. 누군가가 나에게 무엇이 잘못 되었는가를 깨달을 수 있습니까?C# httpwebrequest 자격 증명 문제

// prepare the web page we will be asking for 
HttpWebRequest request = (HttpWebRequest) 
    WebRequest.Create(@"http://diary.com/events/agenda"); 

request.ContentType = "text/html"; 

request.Credentials = new NetworkCredential(@"[email protected]", "password"); 

request.AllowAutoRedirect = true; 
request.Referer = @"http://diary.com/"; 

// execute the request 
HttpWebResponse response = (HttpWebResponse) 
    request.GetResponse(); 

// we will read data via the response stream 
Stream resStream = response.GetResponseStream(); 

// set the WebBrowser object documentStream to the response stream 
myWB.DocumentStream = resStream; 

// simply tell me the title of the webpage 
MessageBox.Show(myWB.Document.Title); 

답변

5

당신은 여기에 두 가지 문제가 있습니다 : 다음과 같이

내 코드는 당신이 아닌 프로토콜 수준에서 자격 증명을 제공하고 있습니다

  1. 어떻게 (본 프로그램 포함) 대부분의 웹 사이트 작업. 프로토콜은 완전히 익명이며 사이트는 폼 인증을 사용하여 로그인합니다. 코드는 실제로 로그인 양식을 제출하는 것과 유사한 POST 요청을 만들어야합니다. 서버에서 되돌아 오는 응답에는 인증 토큰이있는 쿠키가 포함됩니다 ...

  2. 요청간에 쿠키를 유지해야합니다. 로그인 요청을 제출하고 쿠키를 얻은 후에는 쿠키를 사용하여 후속 요청의 요청 헤더에 함께 보내야합니다. 가장 쉬운 방법은 여러 요청에 대해 WebClient을 사용하고 CookieContainer을 사용하여 쿠키를 추적하는 것입니다. 당신이 당신의 브라우저와 웹 사이트 사이에가는 트래픽을 모방하는 방법에 대한 불확실한 경우

는 사용할 수있는 훌륭한 도구가 Fiddler입니다. 귀하가 관찰 할 원시 요청/응답을 캡처합니다.