2012-10-08 66 views
0

我想要使用webclient或httpwebrequest登录到网站,登录后我想导航到网站中的页面。
所以我知道如何发布数据和登录,我的问题是登录后的导航,
它将我重定向到登录页面,我知道它与cookie有关,但我不明白我在做什么,做worng ...这里是我的代码 - >它从另一个stackoverfllow上的answear ...(http://stackoverflow.com/questions/8425593/c-sharp-httpwebrequest-post-login-to-facebook)WebClient/HttpRequest登录后导航到页面

 string getUrl = "somesite.com"; 
     CookieCollection cookies = new CookieCollection(); 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(getUrl); 
     request.CookieContainer = new CookieContainer(); 
     request.CookieContainer.Add(cookies); 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     cookies = response.Cookies; 

     string getUrl2 = "somepage.login.com"; 
     string postData = String.Format("username={0}&userpassword={1}", "foo", "foofoo"); 

     HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(getUrl2); 
     getRequest.CookieContainer = new CookieContainer(); 
     getRequest.CookieContainer.Add(cookies); 

     getRequest.Method = WebRequestMethods.Http.Post; 
     getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 
     getRequest.AllowWriteStreamBuffering = true; 
     getRequest.ProtocolVersion = HttpVersion.Version11; 
     getRequest.AllowAutoRedirect = true; 
     getRequest.ContentType = "application/x-www-form-urlencoded"; 

     byte[] byteArray = Encoding.ASCII.GetBytes(postData); 
     getRequest.ContentLength = byteArray.Length; 
     Stream newStream = getRequest.GetRequestStream(); 
     newStream.Write(byteArray, 0, byteArray.Length); 
     newStream.Close(); 

     HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse(); 
     using (StreamReader sr = new StreamReader(getResponse.GetResponseStream())) 
     { 
      string sourceCode = sr.ReadToEnd(); 
     } 
     //untill here it works fine i'm logged in.... 


     HttpWebRequest getRequest2 = (HttpWebRequest)WebRequest.Create("a page on the site.."); 
     getRequest2.CookieContainer = new CookieContainer(); 
     getRequest2.CookieContainer.Add(cookies); 
     HttpWebResponse getResponse2 = (HttpWebResponse)getRequest2.GetResponse(); 
     cookies = getResponse2.Cookies; 

     using (StreamReader sr = new StreamReader(getResponse2.GetResponseStream())) 
     { 
      string sourceCode = sr.ReadToEnd(); 
     } 
     //here it rediects me to login page 

任何建议>我在做什么错

回答

0

不要实例化的CookieContainer为每个请求。所有请求都需要一个CookieContainer。试试这个:

CookieContainer cc = new CookieContainer(); 

    string getUrl = "somesite.com"; 

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(getUrl); 
    request.CookieContainer = cc; 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

    string getUrl2 = "somepage.login.com"; 
    string postData = String.Format("username={0}&userpassword={1}", "foo", "foofoo"); 

    HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(getUrl2); 
    getRequest.CookieContainer = cc; 

    getRequest.Method = WebRequestMethods.Http.Post; 
    getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 
    getRequest.AllowWriteStreamBuffering = true; 
    getRequest.ProtocolVersion = HttpVersion.Version11; 
    getRequest.AllowAutoRedirect = true; 
    getRequest.ContentType = "application/x-www-form-urlencoded"; 

    byte[] byteArray = Encoding.ASCII.GetBytes(postData); 
    getRequest.ContentLength = byteArray.Length; 
    Stream newStream = getRequest.GetRequestStream(); 
    newStream.Write(byteArray, 0, byteArray.Length); 
    newStream.Close(); 

    HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse(); 
    using (StreamReader sr = new StreamReader(getResponse.GetResponseStream())) 
    { 
     string sourceCode = sr.ReadToEnd(); 
    } 
    //untill here it works fine i'm logged in.... 


    HttpWebRequest getRequest2 = (HttpWebRequest)WebRequest.Create("a page on the site.."); 
    getRequest2.CookieContainer = cc; 
    HttpWebResponse getResponse2 = (HttpWebResponse)getRequest2.GetResponse(); 

    using (StreamReader sr = new StreamReader(getResponse2.GetResponseStream())) 
    { 
     string sourceCode = sr.ReadToEnd(); 
    } 
    //here it rediects me to login page 
+0

不,它将我重定向到登录页面... – user1071420

+0

您确定您已经成功登录? –

+0

是的,我确定。 – user1071420