2012-12-17 5 views
0

쿠키를 지원하는 WebClient를 사용하여이 사이트에서 양식을 제출하려했습니다 : freeclassifieds. 내 업그레이드 된 웹 클라이언트 :WebClient를 사용하여 asp.net 웹 사이트에 로그인 할 수 없습니다.

public class CookieWebClient : WebClient 
{ 
    private readonly CookieContainer container = new CookieContainer(); 

    public CookieWebClient(CookieContainer container) 
    { 
     this.container = container; 
    } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest res = base.GetWebRequest(address); 
     var request = res as HttpWebRequest; 
     if (request != null) 
     { 
      request.CookieContainer = container; 
     } 
     return res; 
    } 

    protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result) 
    { 
     WebResponse response = base.GetWebResponse(request, result); 
     ReadCookies(response); 
     return response; 
    } 

    protected override WebResponse GetWebResponse(WebRequest request) 
    { 
     WebResponse response = base.GetWebResponse(request); 
     ReadCookies(response); 
     return response; 
    } 

    private void ReadCookies(WebResponse r) 
    { 
     var response = r as HttpWebResponse; 
     if (response != null) 
     { 
      CookieCollection cookies = response.Cookies; 
      container.Add(cookies); 
     } 
    } 
} 

하지만 양식을 제출려고 할 때, 난 그냥 차단 및 응답으로 로그인 페이지를 수신받을. 로그인 페이지에서 쿠키와 입력란을 확인했는데 모든 것이 조정 된 것처럼 보입니다. 로그인 성공 후 올바른 페이지를받을 수없는 이유는 무엇입니까?

static void Main(string[] args) 
    { 
     string link1 = "http://www.freeclassifieds.com/logon.aspx"; 

     string fileName= @"D:\Dropbox\myProjects\AutoPostMachine\myHtml.html"; 

     CookieWebClient wc = new CookieWebClient(new CookieContainer()); 

     NameValueCollection postDataCollection= new NameValueCollection(); 
     postDataCollection.Add("ctl00$phMain$txtEmail", "myEmail"); 
     postDataCollection.Add("ctl00$phMain$txtPassword","myPassword"); 
     postDataCollection.Add("ctl00$phMain$btnLogin","Login"); 

     wc.Encoding = Encoding.UTF8; 
     wc.Credentials = CredentialCache.DefaultCredentials; 
     wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
     wc.Headers[HttpRequestHeader.Cookie] = "ASP.NET_SessionId=mfqdx1505nnbw3bxws01so12; __utma=19755559.732186057.1355692154.1355692154.1355695835.2; __utmb=19755559.3.10.1355695835; __utmc=19755559; __utmz=19755559.1355692154.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"; 

     byte[] byteArr= wc.UploadValues(link1, postDataCollection); 
     FileStream fs = new FileStream(fileName, FileMode.Create); 
     fs.Write(byteArr, 0, byteArr.Length); 

     Process.Start(fileName); 
    } 

답변

0

제대로 구성 할 때, 당신이 할 수있는 "스푸핑"가 아니라 ASP.Net 웹은 Postback 양식/경우 - MSDN 심판 : VIEWSTATE and EVENTVALIDATION

+0

감사합니다. 그래서 POSTBACK 이벤트를 실제로 트리거하는 방법은 무엇입니까? – Sherni

관련 문제