.NET - Webseite mit Cookies öffnen VB 

Status
Für weitere Antworten geschlossen.

Jannik

Registered +
Registriert
Apr. 2008
Beiträge
216
Hey Leute,

ich habe folgendes Problem:

Undzwar:

Ich möchte eine Seite laden, ein Art C0mmunity. Dazu möchte ich nicht den WebBrowser benutzen, er hat nicht die Vorraussetzungen, die ich für mein Projekt benötige.

Wie folgt sieht das bei mir aus:
httpRequest = HttpWebRequest.Create("http://www.xxx.eu/messages/show/")
httpResponse = httpRequest.GetResponse()
reader = New StreamReader(httpResponse.GetResponseStream)
httpContent = reader.ReadToEnd

Das laden der Seite klappt auch wunderbar, nur ein riesen Problem besteht: Ich bin nicht eingeloggt. Ich habe mich vorher im IE bzw FireFox eingeloggt, nur mein Programm bleibt ausgeloggt.

Wie krieg ich das nun hin, das mein Programm auch eingeloggt ist? Kann ich irgendwie die auf dem PC gespeicherten Cookies oder wie die heißen (kenn mich damit speziell nicht aus) aus dem Internet Explorer bzw FireFox mitbenutzen, damit das klappt? :)

Wäre echt dankbar, :)

Jannik93
 
Ich denke an den Cookies liegt es nicht.
Aus meiner Sicht wird die Anmeldung per "Post" Request gemacht. Der Kontext bleibt dann über die Lebenszeit der Browsersession vorhanden (sofern man sich nicht abmeldet...).
Darum kannst Du die Anmeldung aus Browser A nicht in Browse B übernehmen. Manche Server werten auch noch die anderen Metadaten aus (z.B. Browsername, OS, ...). Dann ist man auch nicht erfolgreich, wenn man es schafft den Kontext umzuziehen.
Der beste Weg dürfte sein die Anmeldung selbst zu machen. Dazu gibt es im Netz einige Beispiele. Eins davon habe ich mal angehängt:

Code:
private void button4_Click(object sender, EventArgs e)
{
// cookieContainer is used to store the cookies used by the login
CookieContainer cookieContainer = new CookieContainer();
string html;
string loginData = "ownnickname=***&ownpassword=***&submit=Anmelden";

// First hit the login page
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.peterPan.de/index.php?do=login");
req.CookieContainer = cookieContainer;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] loginDataBytes = encoding.GetBytes(loginData);
req.ContentLength = loginDataBytes.Length;
Stream stream = req.GetRequestStream();
stream.Write(loginDataBytes, 0, loginDataBytes.Length);
stream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();

// Then grab the content of the desired page
req = (HttpWebRequest)HttpWebRequest.Create("http://www.peterPan.de/index.php?do=meeting&pos=666");
req.CookieContainer = cookieContainer;
req.Method = "GET";
res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
html = sr.ReadToEnd();

webBrowser1.Document.Body.InnerHtml = html;
}


Wichtig ist erst mal folgende Zeile:
string loginData = "ownnickname=***&ownpassword=***&submit=Anmelden";
Das sind die Daten zum POST-Request basierend auf dem Formular der Anmeldeseite.
Um an die Namen der Felder im Formular zu kommen, musst Du Dir die Webseite mal anschauen.
Du kannst auch das PlugIn "Liveheaders" https://addons.mozilla.org/en-US/firefox/addon/3829 für den Firefox nehmen. Damit lässt sich ein bisschen hinter die Kulissen schauen.
 
Zuletzt bearbeitet von einem Moderator:
' cookieContainer is used to store the cookies used by the login
Dim cookieContainer As New CookieContainer()
Dim html As String
Dim loginData As String = "nick=peter&password=pan&x=66&y=6"

' First hit the login page
Dim req As HttpWebRequest = DirectCast(HttpWebRequest.Create("http://www.peterpan.eu/start/show/"), HttpWebRequest)
req.CookieContainer = cookieContainer
req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
Dim encoding As New ASCIIEncoding()
Dim loginDataBytes As Byte() = encoding.GetBytes(loginData)
req.ContentLength = loginDataBytes.Length
Dim stream As Stream = req.GetRequestStream()
stream.Write(loginDataBytes, 0, loginDataBytes.Length)
stream.Close()
Dim res As HttpWebResponse = DirectCast(req.GetResponse(), HttpWebResponse)

' Then grab the content of the desired page
req = DirectCast(HttpWebRequest.Create("http://www.peterpan..eu/messages/show/"), HttpWebRequest)
req.CookieContainer = cookieContainer
req.Method = "GET"
res = DirectCast(req.GetResponse(), HttpWebResponse)
Dim sr As New StreamReader(res.GetResponseStream())
html = sr.ReadToEnd()

Habe nun mittels HTTPHeaders LoginData und ContentType überarbeitet, es klappt trotzdem nicht :(

Hab ich irgendetwas übersehen? :(

Edit:\\

Bei der LoginData ändert sich ständig "x=xx" und "y=x", woran liegt das?

Edit 2:\\

Hat sich erledigt, klappt wunderbar :)

Danke vielmals :)
 
Zuletzt bearbeitet von einem Moderator:
Habe den Threadtitel angepasst, da man (ich) annahm, du willst Cookies aus dem Fx/IE lesen. => Edited

=> Closed

Gruß
Broken Sword
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten