2011-06-10 112 views
2

我試圖以編程方式登錄到網頁,我有任何喜悅。我看了一下小提琴手,看看瀏覽器在做什麼,但我正努力在代碼中複製它。 這是迄今爲止的代碼。以編程方式登錄到網頁HTTPS(c#)

private void VisitUrl() 
    { 

     string pageVisited = string.Empty; 
     CookieContainer cookies = new CookieContainer(); 


     //Go to login page so that we get a cookie 
     HttpWebRequest loginRequest = (HttpWebRequest)HttpWebRequest.Create("http://www.apage.com/login.asp"); 

     loginRequest.UseDefaultCredentials = true; 
     loginRequest.UserAgent = Constants.usrAgentIE8; 
     loginRequest.CookieContainer = cookies; 
     loginRequest.AllowAutoRedirect = false; 

     HttpWebResponse loginResponse = (HttpWebResponse)loginRequest.GetResponse(); 


     string guid = Regex.Match(loginResponse.Headers["Set-Cookie"], Constants.guidRegex).Value; 
     guid = guid.Replace("%2D", "-"); 

     //Now that we have the cookie we can do a proper login 
     HttpWebRequest doLogin = (HttpWebRequest)HttpWebRequest.Create("https://secure.apage.com/express/login.asp"); 

     //doLogin.UseDefaultCredentials = true; 
     doLogin.UserAgent = Constants.usrAgentIE8; 
     doLogin.Method = Constants.verbPOST; 
     doLogin.ContentType = Constants.contTypeURLenc; 
     doLogin.AllowAutoRedirect = false; 



     using (StreamWriter sw = new StreamWriter(doLogin.GetRequestStream())) 
     { 
      sw.Write("usr=user&pass=" + Constants.pass + "&mc=1&guid=" + guid + "&dbnum=0&ic=1&task=dologin&app=library&x=32&y=10"); 

     } 

     doLogin.CookieContainer = cookies; 
     doLogin.Referer = "http://www.apage.com/login.asp"; 

     HttpWebResponse Response = (HttpWebResponse)doLogin.GetResponse(); 

     string resphead = Response.Headers["Set-Cookie"]; 

     string resp = Response.StatusCode.ToString(); 

     using (StreamReader sr = new StreamReader(Response.GetResponseStream())) 
     { 
      string textresponse = sr.ReadToEnd(); 

     } 


     HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create("http://www.apage.com/toc.aspx?id=40729"); 
     Request.UserAgent = Constants.usrAgentIE8; 
     Request.UseDefaultCredentials = true; 
     Request.CookieContainer = cookies; 

     using (HttpWebResponse urlResponse = (HttpWebResponse)Request.GetResponse()) 
     { 
      using (StreamReader reader = new StreamReader(urlResponse.GetResponseStream())) 
      { 
       pageVisited = reader.ReadToEnd(); 

      } 

     } 

    } 

我的問題是,當我嘗試第三請求,http://www.apage.com/toc.aspx?id=40729,它只是缺少一個cookie,它似乎我回到登錄頁面。這是一次成功的登錄與小提琴手瀏覽器:

1 200 HTTP CONNECT secure.apage.com:443 0   iexplore:5908   
2 200 HTTPS secure.apage.com /express/login.asp 3,253 private  text/html iexplore:5908   
3 200 HTTPS secure.apage.com /express/zarketing.css 13,340  text/css iexplore:5908   
4 200 HTTPS secure.apage.com /express/images/_loadingtext.gif 798  image/gif iexplore:5908   
5 200 HTTP CONNECT secure.apage.com:443 0   iexplore:5908   
6 200 HTTP CONNECT secure.apage.com:443 0   iexplore:5908   
7 200 HTTP CONNECT secure.apage.com:443 0   iexplore:5908   
8 200 HTTP CONNECT secure.apage.com:443 0   iexplore:5908   
9 200 HTTP CONNECT secure.apage.com:443 0   iexplore:5908   
10 200 HTTPS secure.apage.com /express/images/_loadingbox1.gif 66  image/gif iexplore:5908   
11 200 HTTPS secure.apage.com /express/images/_loadingbox5.gif 66  image/gif iexplore:5908   
12 200 HTTPS secure.apage.com /express/images/_loadingbox4.gif 100  image/gif iexplore:5908   
13 200 HTTPS secure.apage.com /express/images/_loadingbox2.gif 66  image/gif iexplore:5908   
14 200 HTTPS secure.apage.com /express/images/_loadingbox3.gif 66  image/gif iexplore:5908   
15 302 HTTP www.apage.com /authenticate.asp?ticket=2ECCC1686F49BE35E14556E76EFCBF3E478157F89B826A03C421883BE61BB634D8DDDB25F8943414252CE46C27B1FAE837B802A7BD1EE9723ECDCB99B7D3D1DB60FAB3042D0D632BF1C41BA622C2546E&mc=1 142 max-age=0, no-cache, no-store Expires: Fri, 10 Jun 2011 09:04:21 GMT text/html iexplore:5908   
16 200 HTTP www.apage.com /toc.aspx?id=40729 86,179 max-age=0, no-cache, no-store Expires: Fri, 10 Jun 2011 09:04:22 GMT text/html; charset=utf-8 iexplore:5908   

請求15是一個重定向和這個請求已經丟失的餅乾,但我不知道這個cookie是如何創建的。它似乎沒有出現在我的第二個請求https://secure.apage.com/express/login.asp的響應中,我在調試時看過。

我是否需要爲所有GIF提出請求?

任何想法?

TIA

+0

標題有點誤導。如果80端口沒有打開,程序就沒用了。該瓷磚應該是「通過HTTP(c#)以編程方式登錄到網頁HTTPS」 – yantaq 2013-12-11 18:47:57

回答

0

您是否嘗試過使用

doLogin.AllowAutoRedirect = true; 

HTTP狀態代碼302(15行)顯示,文件已被 '暫時移動'。您可能需要允許重定向。

另外,cookie信息也可以在Headers集合屬性中傳遞。查看響應的Headers.Keys集合中的任何名稱,如「cookie」。例如,我必須登錄的網站使用名稱「Set-Cookie」。我得到這樣的值:

if (response.Headers["Set-Cookie"] != null) 
{ 
    Match match = Regex.Match(response.Headers["Set-Cookie"].ToString(), @"(?'Name'\w+) 
=(?'Value'\w+).+=(?'Path'[\s\S]+)"); 
    if (match.Success) 
    { 
     Cookie cookie = new Cookie(match.Groups["Name"].ToString(), 
match.Groups["Value"].ToString(), match.Groups["Path"].ToString(), "domain.name.com"); 
     cookies.Add(cookie); 
    } 
} 
+0

雖然我確實已經嘗試將allowautoredirect設置爲true,但無濟於事。當我抽出一點時間時,我可能會再試一次。 – yomismo 2011-07-18 17:00:48

+0

302狀態碼可能與其無關,但是您是否檢查了HTTP標頭收集的cookie信息? – Sheridan 2011-07-18 22:16:09