Ich versuche, eine Webanwendung von meiner .net-Anwendung einzuloggen, aber aus irgendeinem Grund funktioniert es nicht. Hier ist der Login-Code:HttpWebResponse login
<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>
Hier ist, wie ich es von .net zu tun:
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 :-(
I anmelden meinen Browser verwenden und überprüfte mit Fiedler dieser ist, was ich für die Kunden erhalten:
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
Und in der Antwort-Header erhalte ich:
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
Der Keks !!!
Was mache ich falsch, dass ich den Keks nicht bekommen kann?
UPDATE: Code nach Antwort hinzufügen, kann ich jetzt den Cookie bekommen! Ich öffne eine andere Frage, weil es scheint, dass ich immer noch keine sicheren Seiten bekomme ...
Sie haben recht, ich habe den CookieContainer initialisiert und jetzt wird er tatsächlich voll! – Enriquev