2010-05-20 29 views
5

Bir web uygulamasında .net uygulamasından oturum açmaya çalışıyorum, ancak bazı nedenlerden dolayı çalışmıyor.HttpWebResponse login

string userName = "user"; 
string password = "password"; 

string postData = "username=" + userName; 
      postData += ("&password=" + password); 
      postData += ("&axn=Login"); 

HttpWebRequest loginRequest = (HttpWebRequest) 
       WebRequest.Create("http://server.com/process-login.php"); 

//Added following answer begin 
CookieContainer CC = new CookieContainer(); 
loginRequest.CookieContainer = CC; 
//Added following answer end 

loginRequest.Method = "POST"; 
loginRequest.Accept = "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*"; 
loginRequest.Headers.Add("Accept-Encoding: gzip,deflate"); 
loginRequest.Headers.Add("Accept-Language: en-us"); 
loginRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)"; 

loginRequest.ContentLength = postData.Length; 
loginRequest.ContentType = "application/x-www-form-urlencoded"; 

loginRequest.Referer = "http://server.com/login.php"; 
loginRequest.KeepAlive = true; 

//Also added 
loginRequest.AllowAutoRedirect = false; 

StreamWriter newStream = new StreamWriter(loginRequest.GetRequestStream()); 
newStream.Write(postData); 
newStream.Close(); 

//No cookie in the collection :-(

//Problem here, after this line loginRequest url's has changed 
//it's gone back to login.php 
HttpWebResponse responseLogin = (HttpWebResponse)loginRequest.GetResponse(); 


StreamReader stIn = new StreamReader(responseLogin.GetResponseStream()); 
string strResponse = stIn.ReadToEnd(); 
stIn.Close(); 

//strResponde contains the login page, still no cookie :-(

benim tarayıcı kullanarak giriş ve fiddler bununla kontrol Ben müşteri için elde ediyoruz: .net dan bunu nasıl

İşte
<form action="./process-login.php" method="post"> 
     <table border="0" cellpadding="5" cellspacing="0"> 
     <tr> 
      <td>Username:</td> 
      <td><input type="text" size="20" name="username" value=""></td> 
     </tr> 
     <tr> 
      <td>Password:</td> 
      <td><input type="password" size="20" name="password" value=""></td> 
     </tr> 
     <tr> 
      <td><input type="submit" name="axn" value=Login></td> 
     </tr> 
     </table> 
</form> 

: İşte giriş kodudur

POST http://server.com/process-login.php HTTP/1.1 
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */* 
Referer: http://server.com/login.php 
Accept-Language: en-us 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; WOW64; Trident/4.0; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) 
Content-Type: application/x-www-form-urlencoded 
Accept-Encoding: gzip, deflate 
Host: server.com 
Content-Length: 45 
Connection: Keep-Alive 
Pragma: no-cache 

username=username&password=password&axn=Login 

Ve cevap başlıklarında alıyorum:

HTTP/1.1 302 Found 
Date: Thu, 20 May 2010 14:07:36 GMT 
Server: Apache/2.2.3 (Unix) 
Accept-Ranges: bytes 
X-Powered-By: PHP/5.2.0 
Set-Cookie: login=User%7C3142%7CUser+Inc.%7CAll+Orders+Discounted%7C; expires=Thu, 20-May-2010 22:07:36 GMT; domain=server.com 
Set-Cookie: username=deleted; expires=Wed, 20-May-2009 14:07:35 GMT; path=/; domain=server.com 
Set-Cookie: password=deleted; expires=Wed, 20-May-2009 14:07:35 GMT; path=/; domain=server.com 
Location: /index.php 
Content-Length: 0 
Keep-Alive: timeout=15, max=200 
Connection: Keep-Alive 
Content-Type: text/html 

Kurabiye !!!

Neyi yanlış yapıyorum ki kurabiyi alamıyorum?

GÜNCELLEME: Yanıtı takiben kod eklendiğinde, şimdi çerezi alabilirim! Başka bir soru açacağım, çünkü hala güvenli sayfaları alamıyorum gibi görünüyor ...

cevap

5

Web sitesinde, bir CookieContainer ayarlamayı görmüyorum. Bunu ayarlayarak tekrar deneyebilir misiniz?

+0

Haklısın, CookieContainer'ı başlattım ve şimdi de doldu! – Enriquev

1

302'yi aldığınızdan beri, web istemi otomatik olarak bir sonraki URL'yi de talep ediyor. Bunu loginRequest.AllowAutoRedirect = false; ayarlayarak kapatabilirsiniz. Bunu yaptıktan sonra, kurabiyeleri görmelisin. Here's the documentation for AllowAutoRedrect.

+0

Merhaba, loginRequest.AllowAutoRedirect = false ekledim; 'dan sonra loginRequest.KeepAlive = true; Şimdi sayfa değişmiyor, ancak çerez koleksiyonu hala boş ... – Enriquev

İlgili konular