Laden...

HttpWebRequest und AllowAutoRedirect Hilfe

Erstellt von nicky vor 12 Jahren Letzter Beitrag vor 12 Jahren 836 Views
N
nicky Themenstarter:in
232 Beiträge seit 2011
vor 12 Jahren
HttpWebRequest und AllowAutoRedirect Hilfe

Hallo,

Für einen Kunden arbeite ich zur Zeit an einem kleinen Projekt (Desktoptool) mit dem es möglich sein soll seine drei Websites zu administrieren.

Schritt 1: Login Website -> Hier liegt auch schon das Problem

Auf zwei seiner Websites funktioniert der Login problemlos! Zur Überprüfung ob der Login geklappt hat, suche ich im Response Quelltext das Schlagwort "logout".

Auf der dritte Seite klappt der Login nicht, jedenfalls bekomme ich einen "nicht eingeloggten" Response Quelltext zurück.

Leider kann ich seine Websites hier nicht posten, deshalb die Frage ob jemand aus dem Stand ne Idee zu meinem Problem hat.

Natürlich gibts auch ein bisschen Quelltext:


                string URL = "http://www...";
                string Parameters = "username=Admin&password=xxxx&login=1";

                HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
                HttpWebResponse webResponse;

                webRequest.Method = "POST";
                webRequest.UserAgent = "Opera/9.80 (Windows NT 6.1; U; de) Presto/2.5.22 Version/10.51";
                webRequest.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1";
                webRequest.Headers.Add("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
                webRequest.Headers.Add("Accept-Charset", "iso-8859-1, utf-8, utf-16, *;q=0.1");
                webRequest.ContentType = "application/x-www-form-urlencoded";
                webRequest.KeepAlive = true;
                webRequest.AllowAutoRedirect = true;
                webRequest.Referer = URL;
                webRequest.CookieContainer = CookieManager;

                StreamWriter sw = new StreamWriter(webRequest.GetRequestStream());
                sw.Write(Parameters);
                sw.Close();

                webResponse = (HttpWebResponse)webRequest.GetResponse();

                StreamReader sr = new StreamReader(webResponse.GetResponseStream());
                return sr.ReadToEnd();
            }
        
P
157 Beiträge seit 2010
vor 12 Jahren

Ich hab mal für ein Browsergame ein Programm geschrieben, dass alleine gefarmt hatte. Dabei hatte ich 2 Problem:1.Cookies 1.Es hängte sich immer aus, sodass ein 2. einloggen unmöglich wurde

  1. Habe ich mit AllowAutoRedirect = false; gelößt und den Header dann nach Set-Cookies durchsucht, diese dann gespeichert beim Senden, dann gesendet.

Beim 2. Habe ich vergessen, dass HttpResponse objekt zu verwerfen, dass dann im Verlauf zu dem Fehler führte. mut einer


using(Http... response =...)
{
}

hatte sich dass dann auch gelößt, vielleicht hilft es dir.

N
nicky Themenstarter:in
232 Beiträge seit 2011
vor 12 Jahren

Hmm das hört sich schonmal interessant an. In wie fern hattest du Probleme mit den Cookies? Der Cookie Count beträgt 3, was in diesem Fall richtig ist.

AllowAutoRedirect = false; -> Hm.. dann hast du dich manuell um das Folgen der Seiten, falls man redirected wird, gekümmert?

Edit 1: Hast du vielleicht ein bisschen Quelltext zu Punkt 1?

Edit 2: Punkt 2 hilft mir leider nicht weiter.

P
157 Beiträge seit 2010
vor 12 Jahren

Ok da die Cookies stimmen scheint dass nicht das Problem zu sein.
Sicher, dass die Parameter stimmen?
Hast du dir mal die Response angeschauht, was die sage?

N
nicky Themenstarter:in
232 Beiträge seit 2011
vor 12 Jahren

Die Parameter stimmen, der Login scheint auch zu funktionieren!

Verglichen zum Browser Login ist bei meiner Anwendung nur der Response anders.

Ich bin mir ziemlich sicher das der Login funktioniert weil die Website mit einem 302 Redirect antwortet wenn der Login erfolgreich war. Und das ist hier der Fall. Testweise habe ich natürlich auch mal ein falsches Passwort angegeben - Hier wird man nicht redirected.

Kann man mit Wireshark soweit sehr gut nachvollziehen...

N
nicky Themenstarter:in
232 Beiträge seit 2011
vor 12 Jahren

Ok, das Problem wurde erkannt - Jedenfalls indirekt!

Nach einigen Tests mussten wir feststellen das gleiche Code im .net Framework 4.0 zum positiven Ergebnis führt. Da wurde die System.dll aber stark verbessert 🙂

Wer hätt´s gedacht ?(