C# Site Authorization [help :)]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Natali Osina, 25 Jun 2011.

  1. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    Всем привет.
    У меня возникла проблема при реализации одной программки.
    Суть в том, что провайдер имеет локальный ресурс, по которому можно посмотреть сколько трафика осталось.
    Там нету никакой сложности. Все что я увидела, это только страница авторизации и после авторизации перенаправление на страницу информации о количестве трафика.

    вот, например, сораница по адресу провайдера
    где нужно логинится.

    https://stat.providername.ua/login.php#login

    HTML:
    <a name='login'>
    <table class='form' cellpadding='0' cellspacing='0' width='100%'>
    <tbody id='login_form'>
    <form method='post' name='login' action='#login'  onsubmit='return ValidateForm("login",login_validator)'>
    	<input type='hidden' name='login_omen' value='1'>
    	<input type='hidden' name='submiter' value='ok'>
    	<tr class='form_field_row'>
    		<td class='form_field_label form_field_label_required'>логин</td>
    
    		<td class='form_field_value'><input class='form_text' name='login' value='' required='1' positive='' title='логин'></td>
    		<td class='form_field_comment'></td>
    	</tr>
    	<tr class='form_field_row'>
    		<td class='form_field_label form_field_label_required'>пароль</td>
    		<td class='form_field_value'><input type='password' class='form_text' name='pass' value='' required='1' title='пароль'></td>
    		<td class='form_field_comment'></td>
    	</tr>
    
    	<tr class='form_button_row'>
    		<td></td>
    		<td nowrap>	<script language='Javascript'>
    	login_validator='CommonFormCheck';
    	</script>
    	<input class='form_submit' type='submit' name='ok' value='ok' onclick='form.submiter.value="ok";login_validator="CommonFormCheck";'>
    </td>
    		<td></td>
    	</tr>
    </form>
    после того как залогинится перенаплавление на страницу остатком трафика

    https://stat.providername.ua/client_info.php#login
    ну и там страница с инфой.
    например кусок страницы

    HTML:
    <td width="120">депозит</td>
    <td align="right" width="100">25.97</td>
    <td>&nbsp;Текущая сумма на счету клиента</td>
    
    Я хочу написать програмку которая будет иметь поля для ввода логина\пароля и будет в текстовое поле вбивать информацию о том, сколько денег осталось на щету.

    Подскажите\посоветуйте кодом\ссылкой.
    С авторизацией никогда не работала. Просто бробовала получать текстовую информацию со страницы.
    Спасибо.
     
  2. inCode

    inCode Member

    Joined:
    20 Jun 2011
    Messages:
    141
    Likes Received:
    22
    Reputations:
    5
    ты скопировала html код страниц, которые практически ничего не имеют общего с будущей программой, главное это сымитировать пост реквест на сервер где расположен сам сайт.
    вот простенький пост реквест
    Code:
     string postData = "vb_login_username=not&vb_login_password=&s=&securitytoken=guest&do=login&vb_login_md5password=d8578edf8458ce06fbc5bb76a58c5ca4&vb_login_md5password_utf=d8578edf8458ce06fbc5bb76a58c5ca4";
                byte[] data = Encoding.ASCII.GetBytes(postData);
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://forum.kazahstanki.com/login.php?do=login");
    
                myRequest.Method = "POST";
                myRequest.CookieContainer = cookieJar;
                myRequest.UserAgent = "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.8.131 Version/11.11";
                //cookies = myRequest.CookieContainer;
    
                if (proxystatus == true)
                {
    
                    myRequest.Proxy = proxy;
    
                }
                myRequest.ContentType = "application/x-www-form-urlencoded";
    
    
                Stream newStream = myRequest.GetRequestStream();
                newStream.Write(data, 0, data.Length);
                HttpWebResponse wr = (HttpWebResponse)myRequest.GetResponse();
    
                cookies = myRequest.CookieContainer;
    
                newStream.Close();
                newStream.Dispose();
    
                byte[] b = null;
                using (Stream stream = wr.GetResponseStream())
                using (MemoryStream ms = new MemoryStream())
                {
                    int count = 0;
                    do
                    {
                        byte[] buf = new byte[1024];
                        count = stream.Read(buf, 0, 1024);
                        ms.Write(buf, 0, count);
                    } while (stream.CanRead && count > 0);
                    b = ms.ToArray();
                }
                var html = Encoding.Default.GetString(b);
    А что бы получить определенное значение со страницы, нужно ее для начала запросить с сервера, и потом определенным образом парсить страницу.

    вот к примеру функция убирает весь html
    Code:
    private string Strip(string text)
            {
                return Regex.Replace(text, @"<(.|\n)*?>", string.Empty);
            }
    
    дальше пользуйся к примеру

    Code:
    string s ="";
    string news = "";
    s = htmlpage;
    news = s.Replace("что нужно заменить","на, что, как вариант можно string.Empty");
    или есть такое
    news = s.Remove();
    
     
  3. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    Спасибо большое, я сейчас попробую и отпишу работает или нет.
     
  4. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    попробовала только что для варианта от человека kosmo987
    если я правильно поняла в первый текстбокс вводится логин , а во второй пароль?
    тогда имеем исключение в сроке
    res = (HttpWebResponse)req.GetResponse();

     
  5. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    о если есть возможность игнорировать проверку сертификата, это может помочь.
    Сейчас поправлю программку и попробую опять. Спасибо)
     
  6. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    до того как вызвать
    res = (HttpWebResponse)req.GetResponse();
    написала
    System.Net.ServicePointManager.ServerCertificateVa lidationCallback = delegate { return true; };
    теперь получаем месседжбокс
    if (res.StatusCode != HttpStatusCode.Redirect)
    MessageBox.Show("wrong data!");


    тоисть что то не так все равно..
     
  7. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    вот я нашла еще информацию по этой теме по ссылке
    http://www.dreamincode.net/forums/topic/152297-c%23-log-in-to-website-programmatically/
    сейчас попробую скачать эту программку Tamper Data и посмотрю что она мне напишет.
    Если что то напишет то что именно нужно написать тут что бы решить проблему? :)
     
  8. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    вот я попробовала открыть ссылку
    https://stat.providername.ua/login.php?login=login&pass=password
    где логин и пароль = мои данные.
    по данной ссылке ошибки небыло, просто открылась страница, в которой нужно ввести логин и пароль для входа, а именно https://stat.providername.ua/login.php
     
  9. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    сейчас разберусь с программкой и скину что она выдаст мне.
     
  10. inCode

    inCode Member

    Joined:
    20 Jun 2011
    Messages:
    141
    Likes Received:
    22
    Reputations:
    5
    ну установи в фаерфокс приложение фаербаг, и посмотри, что там, сымитируй этот пост реквест 1 к 1 и все :)
     
  11. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    PHP:
            public void get_balance()
            {
                
    HttpWebRequest req;
                
    HttpWebResponse res;
                
    string page "";
                
    Stream myStreamReader;
                
    StreamReader Reader;
                
    CookieContainer cook = new CookieContainer();

    byte[] ByteArr;
                
    string sQueryString "";

                
    req = (HttpWebRequest)HttpWebRequest.Create("https://stat.providername.ua/login.php");
                
    req.AllowAutoRedirect false;
    req.CookieContainer cook;
                
    req.Method "POST";
                
    req.Headers.Add("Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0");
                
    req.ContentType "application/x-www-form-urlencoded";
                
    sQueryString "login=" textBox1.Text "&pass=" textBox2.Text;
                
    ByteArr System.Text.Encoding.GetEncoding(1251).GetBytes(sQueryString);
                
    req.ContentLength ByteArr.Length;
                
    System.Net.ServicePointManager.ServerCertificateValidationCallback delegate { return true; };
                
    req.GetRequestStream().Write(ByteArr0ByteArr.Length);
                
    req.GetRequestStream().Close();
                
    res = (HttpWebResponse)req.GetResponse();
                
    res.Close(); 

                if (
    res.StatusCode != HttpStatusCode.Redirect)
                    
    MessageBox.Show("wrong data!");
                else
                {
    опять WrongData.
    сейчас скину информацию с программки для фаерфокса.
     
  12. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    вот мне программа выдала такую информацию, после нажатия кнопки ЛОГИН

    POSTDATA=login_omen=1&submiter=ok&login=MYLOGIN&pass=MYPASSWORD&ok=ok
     
  13. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    вот что в конечном итоге получилось

    потом вроде работает, wrong data уже не вылетает.
    теперь заполнить ричтекстбокс пробую

    но в него ничего не передается. в чем может быть проблема?
    сейчас сама попробую пройтись дебагером посмотреть чего не хватает.
    Спасибо за советы и код)
    я так понимаю теперь осталось только отобразить текст страницы и спарсить его?
     
  14. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    в переменной page есть полностью код страницы )))) УрРрРаАаА!!!))
    это главное. а как получить нужную информацию уже попробую сама написать)
    Еще раз Большое спасибо!
     
  15. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    Да, kosmo987, я как раз начала читать про регулярные выражения.
    Блин чем дальше тем интереснее)
    а учиться на программиста сложно? ))
     
    #15 Natali Osina, 26 Jun 2011
    Last edited: 26 Jun 2011
  16. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    да мне не поступать) так спросила))
    я уже учусь другой специальности)
     
  17. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    хоть ты и девушка, но RTFM
    все расписано и разжевано в 1000 мест

    учиТЬся (Если уже не школьница, да даже и если в старших классах - то СТЫДНО!) на программиста не сложно, ровно также, как и по любой другой профессии, все зависит от человека, в ВУЗЕ никто никого не учит, а только дает необходимую информацию. Все остальное необходимо постигать самому, уметь адаптироваться.
     
    #17 AlexTheC0d3r, 26 Jun 2011
    Last edited: 26 Jun 2011
  18. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    1) я не знаю что такое RTFM :)
    2) русский не мой родной язык, и меня ему никто не учил так что сорри если где то будут оШеПяТкИ :)
     
  19. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    1) потому что надо хоть пытаться пользоваться гуглом. http://www.google.ru/search?q=RTFM
     
  20. Natali Osina

    Natali Osina New Member

    Joined:
    15 Jun 2011
    Messages:
    65
    Likes Received:
    3
    Reputations:
    0
    Да я то прогуглила это)
    просто написала сначала что не знала раньше о том, что Вы называете RTFM ))
    Я конечно же могла нагуглить и написать что я знаю и поняла, но это была бы неправда))