ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
1212
1212
EMPFEHLEN
-
Hallo Leute,
wir haben zur Zeit ein ziemlich großes Problem. Zuerst muss ich anmerken das wir noch ziemliche Anfänger auf dem
C#-Gebiet sind. Wir versuchen in unserem Projekt auf den Inhalt einer WebSeite zuzugreifen. Dazu müssen wir uns zuerst
automatisch bei der Website einloggen, um dann auf die entsprechende Seite zu gelangen.
Als Beispiel dafür könnte man den Zugriff auf einen speziellen Thread in einem Forum nehmen, der nur für eingeloggte User
sichtbar ist. Man muss sich zuerst einloggen um die Seite überhaupt eingezeigt zu bekommen. Das wollen wir nun in unserem
Programm machen.
Unsere erste Idee war es den Zugriff über ein Cookie zu machen, allerdings verliefen unsere Bemühungen in diesem
Bereich im Sande. Nun haben wir ein Programm erstellt das per WebRequest auf die Website zugreift und lesen damit den
Quellcode der Seite aus. Über PreAuthenticate + NetworkCredentials sollten dem Server Username und Password übergeben
werden.
Das Programm lässt sich nun ohne Fehler ausführen, jedoch gelingt uns das einloggen nicht und wir
bekommen nur den Quellcode der Seite auf die wir weitergeleitet werden (als ob wir nicht eingeloggt wären -->Logout Seite).
Der Server reagiert also praktisch überhaupt nicht auf unseren Login-Versuch.
Hier unser bisheriger Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
public static void Main() { //Webrequest wird gestartet WebRequest request = WebRequest.Create("http://www.zmp.de/login/default.asp"); //Default-Loginseite //"http://www.zmp.de/milchvbereich/wk.asp" = die Unterseite auf die wir eigentlich zugreifen wollen //Sendet die Credentials ohne Aufforderung des Servers request.PreAuthenticate = true; //Username und Passwort werden definiert string strUserName = "****"; string strPassword = "****"; //Network.Credentials werden übergeben NetworkCredential networkCredential = new NetworkCredential(strUserName, strPassword); request.Credentials = networkCredential; WebResponse response = request.GetResponse(); //DataStream wird geöffnet Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd(); Console.WriteLine(responseFromServer); //Schreibt Antwort in TXT-Datei StreamWriter WStream = new StreamWriter("test.txt"); WStream.Write(responseFromServer); WStream.Close(); reader.Close(); dataStream.Close(); response.Close(); Console.ReadLine(); }
Mittlerweile haben wir auch noch eine zweite Methode gefunden, die allerdings genau das selbe Ergebnis liefert wie die Vorherige. Hier der Neue:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
class Programm { private static HttpWebRequest request; private static HttpWebResponse response; public static void Main() { string requestUrl = "http://www.zmp.de/login/default.asp"; //Diese Parameter werden per Post Methode übergeben string requestParameter = "UserID=****&Password=****&Ziel=&Url=&Lizenz=&Titel=&Login=Login&Anmelden=Hier einloggen"; request = (HttpWebRequest)WebRequest.Create(requestUrl); #region Schreib Werte in den RequestStream der an die URL geschickt wird byte[] parameter = Encoding.UTF8.GetBytes(requestParameter); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = parameter.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(parameter, 0, parameter.Length); requestStream.Close(); #endregion //Holt sich die Antwort response = (HttpWebResponse)request.GetResponse(); #region Liest die Antwort (ResponseStream) und gibt sie auf der Console aus Stream responseStream = response.GetResponseStream(); StreamReader streamReader = new StreamReader(responseStream); string Ausgabe = streamReader.ReadToEnd(); Console.WriteLine(streamReader.ReadToEnd()); StreamWriter WStream = new StreamWriter("test.html"); WStream.Write(Ausgabe); streamReader.Close(); responseStream.Close(); WStream.Close(); #endregion } }
Für schnelle Hilfe wären wir sehr dankbar, da wir unter starkem Zeitdruck stehen.
Liebe Grüße,
Maatze
-
29.01.09 16:54 #2
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Hi.
Hab euren Code jetzt nicht zur gänze gelesen, aber wegen der Variante mit dem Cookie. Wie habt ihr es denn gemacht?
Wenn die betroffene Seite den Auth-Mechanismus über Cookies regelt, sollte folgender Ablauf klappen:
- CookieContainer erstellen, welcher für jeden Request wiederverwendet wird
- Login-Formular mit den notwendigen Formulardaten aufrufen
- Die eigentlich gewollte Seite aufrufen
Sprich: Loggt euch auf der Seite ein, dann habt ihr die nötigen Daten im CookieContainer, und da ihr diesen bei jeden weiteren Aufruf wiederverwendet, seid ihr auch immer eingeloggt.
lg,..With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Hey,
danke schonmal für die schnelle Antwort. Habe jetzt schnell unseren Code mit Cookie-Einsatz herausgekramt. Mit diesem Code bekommen wir allerdings immer einen Internen Serverfehler (500).
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
public static void Main() { // Cookie wird benötigt um die session von PHP aufrecht zu erhalten CookieContainer cookieContainer = new CookieContainer(); string html; string loginData = "UserID=****&Password=****&Ziel=&Url=&Lizenz=&Titel=&Login=Login&Anmelden=Hier einloggen"; // First hit the login page HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.zmp.de/login/default.asp"); 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(); // Packe den Content der Seite die hinter der Authenifizierung liegt req = (HttpWebRequest)HttpWebRequest.Create("http://www.zmp.de/milchvbereich/getpage_kopf_fuss.asp?Aufruf=l&Ziel=europapreise/grossbritannien.asp"); req.CookieContainer = cookieContainer; req.Method = "GET"; res = (HttpWebResponse)req.GetResponse(); StreamReader sr = new StreamReader(res.GetResponseStream()); html = sr.ReadToEnd(); //this.webBrowser1.DocumentText = html; // webBrowser1.Document.Body.InnerHtml = html; }
LG
Maatze
-
Hallo nochmal!
Niemand Ahnung oder nen Tip dazu wo der Fehler im Code liegen könnte?
Liebe Grüße,
Maatze
Ähnliche Themen
-
JAVA HTTP multipart Post funktioniert nicht
Von kriizz im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 23.04.10, 16:53 -
[VB.Net] WebRequest mit Cookie
Von Thau im Forum .NET Web und KommunikationAntworten: 4Letzter Beitrag: 27.05.09, 09:36 -
HTTP-Dateiupload funktioniert nicht
Von javaprogger1987 im Forum JavaAntworten: 0Letzter Beitrag: 25.03.07, 12:17 -
getURL("http://abc.de" "_blank"); - funktioniert nicht mehr
Von ali-gator im Forum Flash PlattformAntworten: 5Letzter Beitrag: 04.05.06, 10:31 -
[c#] WebRequest geht nicht auf anderen Rechnern
Von Ezzz im Forum C/C++Antworten: 7Letzter Beitrag: 10.07.03, 14:49





Zitieren

Login





