none
C# Einloggen in ein (Mybb)Forum ? RRS feed

  • Frage

  • Hi leute ich wollte gerne eine Form erstellen in der man sich am anfang einlogen muss ! wen man sich erfolgreich eingelogt hat geht form2 auf und form1 verschwindet.Ich habe mir ein Mybb Forum erstellt. Wie ist es möglich sich dort einzulogen per C#?

    Es gibt 2 tesxtbox 1 fürn loginnamen 2 für das passwort dan gibs eben einen login button durch den man dan eingeloggt wird  und wen das geklappt hat soll form 2 erscheinen !

    Wie geht das ?

    Freitag, 19. August 2011 13:18

Antworten

  • Hi,

    für WebRequests (nicht anderes wäre das hier) gibt es

      HttpWebRequest

    und

      HttpWebResponse

    Damit kannst Du die Anfrage an den Server senden und die Rückgabe auswerten. Um zu wissen, was genau Du da senden musst, kannst Du dir einfach den normalen Request im Browser bspw. mit Firebug, Fiddler, ... anschauen und den dann per HttpWebRequest nachbauen.

    Wenn Du die Website innerhalb deiner Anwendung anzeigen willst, kannst Du auch das WebBrowser Control nehmen. Dort kannst Du dann über GetElementById( ... ) die Controls raussuchen, mit Werten befüllen und per Code den Button Klick auf Anmelden simulieren. Siehe dazu auch:

      http://vbcity.com/blogs/jatkinson/archive/2009/12/12/programmatically-entering-and-data-using-the-webbrowser-control.aspx

     

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert LegendNeo Samstag, 20. August 2011 13:47
    Freitag, 19. August 2011 13:44
    Moderator
  • Servus LegendNeo,

    da ich, während Setfan Falz antwortete, ein kleines Beispiel geschrieben hatte, möchte ich dir es nicht vorenthalten. Die Basics hat er dir ja bereits erklärt (nochmal davon gekommen :) ) und daher hier kurz der Code. Auf meiner Form befinden sich 2 Textbox-, ein Button- und ein WebBrowsersteuerelement(e):

    using System;
    using System.Collections.Specialized;
    using System.IO;
    using System.Net;
    using System.Windows.Forms;
    
    namespace MyBB
    {
      public partial class Form1 : Form
      {
        public Uri ForumUri { get; set; }
    
        public String LoginPage { get; set; }
    
        public String CompleteUrl
        {
          get { return new Uri(ForumUri, LoginPage).ToString(); }
        }
    
        public Form1()
        {
          InitializeComponent();
    
          ForumUri = new Uri("http://community.mybb.com/");
          LoginPage = "member.php";
        }
    
        private void BtnLoginClick(object sender, EventArgs e)
        {
          WebClient myWebClient = new WebClient();
          
          // Basisadresse dem WebClient zuweisen
          myWebClient.BaseAddress = ForumUri.ToString();
    
          NameValueCollection daten = new NameValueCollection();
          daten.Add("action", "do_login");
          daten.Add("url", CompleteUrl);
          daten.Add("quick_login", "1");
          daten.Add("quick_username", txbUsername.Text);
          daten.Add("quick_password", txbPassword.Text);
          daten.Add("submit", "Login");
          daten.Add("quick_remember", "no");
    
          Byte[] antwort = myWebClient.UploadValues(CompleteUrl, daten); //Daten übertragen und Antwort speichern
    
          MemoryStream myStream = new MemoryStream(antwort);
          
          StreamReader myReader = new StreamReader(myStream);
    
          webBrowser.DocumentText = myReader.ReadToEnd();      
        }
      }
    }
    
    

    Wenn du jetzt in die Textboxen die entsprechenden Werte hinein schreibst, so wirst du das entsprechende Ergebnis in dem WebBrowser präsentiert bekommen. Den HTML Text, der zurückgegeben wird, müsstest du dann natürlich per Hand auswerten, um zu sehen, ob du erfolgreich eingeloggt wurdest.

    Wie du sehen kannst, benutze ich anstelle der HttpWebRequest und HttpWebResponse-Klassen die WebClient Klasse, da ich finde, dass sie sich zumindest hierfür einfacher handhaben lässt. Ansonsten hat Stefan bereits alles Wichtige genannt.

    Grüße,
    CK~

     

    • Als Antwort markiert LegendNeo Samstag, 20. August 2011 13:47
    Freitag, 19. August 2011 14:11

Alle Antworten

  • Hi,

    für WebRequests (nicht anderes wäre das hier) gibt es

      HttpWebRequest

    und

      HttpWebResponse

    Damit kannst Du die Anfrage an den Server senden und die Rückgabe auswerten. Um zu wissen, was genau Du da senden musst, kannst Du dir einfach den normalen Request im Browser bspw. mit Firebug, Fiddler, ... anschauen und den dann per HttpWebRequest nachbauen.

    Wenn Du die Website innerhalb deiner Anwendung anzeigen willst, kannst Du auch das WebBrowser Control nehmen. Dort kannst Du dann über GetElementById( ... ) die Controls raussuchen, mit Werten befüllen und per Code den Button Klick auf Anmelden simulieren. Siehe dazu auch:

      http://vbcity.com/blogs/jatkinson/archive/2009/12/12/programmatically-entering-and-data-using-the-webbrowser-control.aspx

     

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    • Als Antwort markiert LegendNeo Samstag, 20. August 2011 13:47
    Freitag, 19. August 2011 13:44
    Moderator
  • Servus LegendNeo,

    da ich, während Setfan Falz antwortete, ein kleines Beispiel geschrieben hatte, möchte ich dir es nicht vorenthalten. Die Basics hat er dir ja bereits erklärt (nochmal davon gekommen :) ) und daher hier kurz der Code. Auf meiner Form befinden sich 2 Textbox-, ein Button- und ein WebBrowsersteuerelement(e):

    using System;
    using System.Collections.Specialized;
    using System.IO;
    using System.Net;
    using System.Windows.Forms;
    
    namespace MyBB
    {
      public partial class Form1 : Form
      {
        public Uri ForumUri { get; set; }
    
        public String LoginPage { get; set; }
    
        public String CompleteUrl
        {
          get { return new Uri(ForumUri, LoginPage).ToString(); }
        }
    
        public Form1()
        {
          InitializeComponent();
    
          ForumUri = new Uri("http://community.mybb.com/");
          LoginPage = "member.php";
        }
    
        private void BtnLoginClick(object sender, EventArgs e)
        {
          WebClient myWebClient = new WebClient();
          
          // Basisadresse dem WebClient zuweisen
          myWebClient.BaseAddress = ForumUri.ToString();
    
          NameValueCollection daten = new NameValueCollection();
          daten.Add("action", "do_login");
          daten.Add("url", CompleteUrl);
          daten.Add("quick_login", "1");
          daten.Add("quick_username", txbUsername.Text);
          daten.Add("quick_password", txbPassword.Text);
          daten.Add("submit", "Login");
          daten.Add("quick_remember", "no");
    
          Byte[] antwort = myWebClient.UploadValues(CompleteUrl, daten); //Daten übertragen und Antwort speichern
    
          MemoryStream myStream = new MemoryStream(antwort);
          
          StreamReader myReader = new StreamReader(myStream);
    
          webBrowser.DocumentText = myReader.ReadToEnd();      
        }
      }
    }
    
    

    Wenn du jetzt in die Textboxen die entsprechenden Werte hinein schreibst, so wirst du das entsprechende Ergebnis in dem WebBrowser präsentiert bekommen. Den HTML Text, der zurückgegeben wird, müsstest du dann natürlich per Hand auswerten, um zu sehen, ob du erfolgreich eingeloggt wurdest.

    Wie du sehen kannst, benutze ich anstelle der HttpWebRequest und HttpWebResponse-Klassen die WebClient Klasse, da ich finde, dass sie sich zumindest hierfür einfacher handhaben lässt. Ansonsten hat Stefan bereits alles Wichtige genannt.

    Grüße,
    CK~

     

    • Als Antwort markiert LegendNeo Samstag, 20. August 2011 13:47
    Freitag, 19. August 2011 14:11
  • grige ich nicht so richtig hin kannste mir noch ein beispiel geben wie ich die antwort abfangen kann ?

     

    Samstag, 20. August 2011 10:02
  • Hi,

    grige ich nicht so richtig hin kannste mir noch ein beispiel geben wie ich die antwort abfangen kann ?

    Och komm. Ein wenig anstrengen kannst Du dich schon. Probier es mit den Hinweisen und wenn Du dann an bestimmten Stellen noch Probleme hast, frag nochmal hier. Aber alles muss man doch nicht vorkauen. In Christopher's Beispiel steht auch drin, wie die Rückgabe entgegengenommen wird. Nur, weil das evtl. etwas kompliziert aussieht (was es nicht ist) muss man nicht gleich sagen, dass man damit nicht zurechtkommt.

    Parsen kannst Du die Rückgabe bspw. mit dem Html Agility Pack.

    Das WebBrowser Control macht nur dann Sinn, wenn Du das, was geladen wird, auch sehen oder grafisch verarbeiten willst.

    Aber schauen, was ein MyBB Forum wie wann wo warum zurücksendet und welches Kennzeichen Du auslesen musst um zu wissen, ob das Login erfolgreich war oder nicht, musst Du schon selbst.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Samstag, 20. August 2011 11:58
    Moderator
  • Ok danke klappt
    Samstag, 20. August 2011 13:47