inloggen en pagina van website bekijken.

Status
Niet open voor verdere reacties.

Tomboman

Gebruiker
Lid geworden
15 feb 2013
Berichten
32
Hoi,

Ik probeer voor mijn programma op een website in te loggen en dan de content van de webpagina te bekijken.
Ik heb er alleen een paar probleempjes mee.

1. Als ik probeer in te loggen krijg ik een messebox dat het gelukt is.
2. Als ik de content van een webpagina ga bekijken zegt hij dat hij niet is ingelogd.
3. Als ik kijk in de (website) database staat er ook dat ik niet ben ingelogd.
(Op de login pagina op de website worden de sessies aangemaakt).

Hier mijn codes:

Code:
public Hashtable _otherData { get; set; }

        public String GetWebContent(String _hyperlink, String username, String password)
        {
            String _retVal = "err001";
            String _urlLogin = "";
            String _urlSignin = "";
            String _respStr = "";
            String _postData = "";

            Uri _uriLogin = null;
            Uri _uriSignin = null;

            

            _urlLogin = _hyperlink; // is the login Page
            _urlSignin = _hyperlink; //is the link used inside the action of the form tag (Note: I suppose in this example that the form name inside the _urlLogin page is "loginForm")

            //_urlLogin = "https://www.continental.com/web/en-US/apps/account/account.aspx";
            //_urlSignin = "https://www.continental.com/web/en-US/apps/account/signin.aspx";


            _uriLogin = new Uri(_urlLogin);
            _uriSignin = new Uri(_urlSignin);

            try
            {
                HttpWebRequest _wReq;
                HttpWebResponse _wResp;
                System.IO.StreamReader _sr;
                System.Text.ASCIIEncoding _enc = new System.Text.ASCIIEncoding();

                CookieContainer _cookies;

                _wReq = (HttpWebRequest)WebRequest.Create(_uriLogin);
                _wReq.CookieContainer = new CookieContainer();
                _wReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

                _wResp = (HttpWebResponse)_wReq.GetResponse();
                _sr = new System.IO.StreamReader(_wResp.GetResponseStream());
                _respStr = _sr.ReadToEnd();
                _sr.Close();

                _cookies = _wReq.CookieContainer;

                _wResp.Close();

                _otherData = new Hashtable();
                _otherData.Add("login", new Hashtable());
                _otherData.Add("pass", new Hashtable());

                //Here insert all the parameter needed for the login... eg: in my example I suppose that the loginForm has two input field named "username" and "password"
                ((Hashtable)_otherData["login"])["value"] = username;
                ((Hashtable)_otherData["pass"])["value"] = password;
                //you could need  to insert other information

                _postData = "";
                foreach (string name in _otherData.Keys)
                {
                    _postData += "&" + name + "=" + ((Hashtable)_otherData[name])["value"];
                }
                _postData = _postData.Substring(1);

                byte[] _data = _enc.GetBytes(_postData);

                _wReq = (HttpWebRequest)WebRequest.Create(_uriSignin);
                _wReq.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                _wReq.Referer = _urlLogin;
                _wReq.KeepAlive = true;
                _wReq.Method = "POST";
                _wReq.ContentType = "application/x-www-form-urlencoded";
                _wReq.ContentLength = _data.Length;
                _wReq.CookieContainer = _cookies;
                _wReq.AllowAutoRedirect = false;
                _wReq.UserAgent = "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";


                System.IO.Stream _outStream = _wReq.GetRequestStream();
                _outStream.Write(_data, 0, _data.Length);

                _outStream.Close();


                _wResp = (HttpWebResponse)_wReq.GetResponse();
                _sr = new System.IO.StreamReader(_wResp.GetResponseStream());
                _respStr = _sr.ReadToEnd();
                _sr.Close();

                _wResp.Close();


                // _respStr contains the page content... use this for your needed.
                _retVal = _respStr;

            }
            catch (Exception ex)
            {
                string err = ex.ToString();
                throw ex;
                //Response.Write(e.ToString());
                //return null;
            }

            return _retVal;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(
                GetWebContent("http://www.domein.nl/login.php", "Admin", "******")
            );

            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://www.domein.nl/reizen.php");
            myRequest.Method = "GET";
            WebResponse myResponse = myRequest.GetResponse();
            StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
            string result = sr.ReadToEnd();
            MessageBox.Show(result);
            sr.Close();
            myResponse.Close();
        }

Ziet iemand toevallig wat ik verkeerd heb, en kan verbeteren?
 
In GetWebContent wordt keurig ingelogd omdat daar twee requests worden gedaan en bij de tweede request ook sessie-informatie (mbv cookies) wordt meegegeven.

Bij het request WebRequest.Create("http://www.domein.nl/reizen.php") wordt geen enkele informatie over de sessie meegegeven. Voor de ontvanger van het request lijkt het dus alsof er een request wordt gedaan door iemand die niet ingelogd is. Je zal myRequest dus moeten uitbreiden met sessie-informatie. Hoe sessie-informatie er uitziet verschilt van domein tot domein dus dat zal je voor het domein waar je requests heen gaat zenden uit moeten zoeken.

Succes.
Erik
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan