Всем привет. У меня возникла проблема при реализации одной программки. Суть в том, что провайдер имеет локальный ресурс, по которому можно посмотреть сколько трафика осталось. Там нету никакой сложности. Все что я увидела, это только страница авторизации и после авторизации перенаправление на страницу информации о количестве трафика. вот, например, сораница по адресу провайдера где нужно логинится. 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> Текущая сумма на счету клиента</td> Я хочу написать програмку которая будет иметь поля для ввода логина\пароля и будет в текстовое поле вбивать информацию о том, сколько денег осталось на щету. Подскажите\посоветуйте кодом\ссылкой. С авторизацией никогда не работала. Просто бробовала получать текстовую информацию со страницы. Спасибо.
ты скопировала 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();
попробовала только что для варианта от человека kosmo987 если я правильно поняла в первый текстбокс вводится логин , а во второй пароль? тогда имеем исключение в сроке res = (HttpWebResponse)req.GetResponse();
о если есть возможность игнорировать проверку сертификата, это может помочь. Сейчас поправлю программку и попробую опять. Спасибо)
до того как вызвать res = (HttpWebResponse)req.GetResponse(); написала System.Net.ServicePointManager.ServerCertificateVa lidationCallback = delegate { return true; }; теперь получаем месседжбокс if (res.StatusCode != HttpStatusCode.Redirect) MessageBox.Show("wrong data!"); тоисть что то не так все равно..
вот я нашла еще информацию по этой теме по ссылке http://www.dreamincode.net/forums/topic/152297-c%23-log-in-to-website-programmatically/ сейчас попробую скачать эту программку Tamper Data и посмотрю что она мне напишет. Если что то напишет то что именно нужно написать тут что бы решить проблему?
вот я попробовала открыть ссылку https://stat.providername.ua/login.php?login=login&pass=password где логин и пароль = мои данные. по данной ссылке ошибки небыло, просто открылась страница, в которой нужно ввести логин и пароль для входа, а именно https://stat.providername.ua/login.php
ну установи в фаерфокс приложение фаербаг, и посмотри, что там, сымитируй этот пост реквест 1 к 1 и все
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(ByteArr, 0, ByteArr.Length); req.GetRequestStream().Close(); res = (HttpWebResponse)req.GetResponse(); res.Close(); if (res.StatusCode != HttpStatusCode.Redirect) MessageBox.Show("wrong data!"); else { опять WrongData. сейчас скину информацию с программки для фаерфокса.
вот мне программа выдала такую информацию, после нажатия кнопки ЛОГИН POSTDATA=login_omen=1&submiter=ok&login=MYLOGIN&pass=MYPASSWORD&ok=ok
вот что в конечном итоге получилось потом вроде работает, wrong data уже не вылетает. теперь заполнить ричтекстбокс пробую но в него ничего не передается. в чем может быть проблема? сейчас сама попробую пройтись дебагером посмотреть чего не хватает. Спасибо за советы и код) я так понимаю теперь осталось только отобразить текст страницы и спарсить его?
в переменной page есть полностью код страницы )))) УрРрРаАаА!!!)) это главное. а как получить нужную информацию уже попробую сама написать) Еще раз Большое спасибо!
Да, kosmo987, я как раз начала читать про регулярные выражения. Блин чем дальше тем интереснее) а учиться на программиста сложно? ))
хоть ты и девушка, но RTFM все расписано и разжевано в 1000 мест учиТЬся (Если уже не школьница, да даже и если в старших классах - то СТЫДНО!) на программиста не сложно, ровно также, как и по любой другой профессии, все зависит от человека, в ВУЗЕ никто никого не учит, а только дает необходимую информацию. Все остальное необходимо постигать самому, уметь адаптироваться.
1) я не знаю что такое RTFM 2) русский не мой родной язык, и меня ему никто не учил так что сорри если где то будут оШеПяТкИ
Да я то прогуглила это) просто написала сначала что не знала раньше о том, что Вы называете RTFM )) Я конечно же могла нагуглить и написать что я знаю и поняла, но это была бы неправда))