Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
7 / 7 / 0
Регистрация: 08.10.2015
Сообщений: 126
1

Авторизация посредством POST-запроса

23.12.2015, 22:25. Показов 5770. Ответов 57

Author24 — интернет-сервис помощи студентам
Доброго времени суток дорогие формучане. Назрела проблемка, нужно реализовать авторизацию в программе, то есть пользователь вводит пасс и лог в поля, эти поля отсылаются на сервер по средствам POST, там в php файле идёт обработка и сверка с бд, если всё ок отсылает ответ что мол всё ок.
Смог найти как это делается на JAVA, но сколько не искал к сожалению не смог найти толкового объяснения как
Кликните здесь для просмотра всего текста
Java
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
HttpURLConnection connection = null;
        try {
            URL url = new URL(sURL);
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("User-Agent", "Launcher Wolf v0.1"); //Передаём версию клиента
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // передаём лог и пасс
            connection.setRequestProperty("Content-Length", Integer.toString(Params.getBytes().length)); //предаём размер
            connection.setRequestProperty("Content-Language", "en-US"); // передаём язык
            
            connection.setUseCaches(false);
            connection.setDoInput(true);
            connection.setDoOutput(true);
            
            connection.connect();
            try (DataOutputStream dos = new DataOutputStream(connection.getOutputStream())) {  
                dos.writeBytes(Params);
                dos.flush();
            }
            
            InputStream is = connection.getInputStream();
            StringBuilder resp;
            try (BufferedReader brd = new BufferedReader(new InputStreamReader(is))) {
                resp = new StringBuilder();
                String line;
                while((line = brd.readLine()) !=null) {
                    resp.append(line);
                    resp.append('\r');
                }
            }
            String strn = resp.toString().trim();
            return strn;
Java
1
 String AuthResult = Util.Connect("http://83.167.111.21/launcher/auth.php", "a=auth" + "&user" + user + "&password" + pass);


перепилить под с++

Понял что это делается через библиотеку QtNetwork , в целом это всё.
Вот так выглядит php файлик
PHP
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
include ('conn.php');
 
$Arg = mysql_real_escape_string($_POST['a']);
$Login = mysql_real_escape_string(trim(htmlspecialchars($_POST['user'])));
$Pass = mysql_real_escape_string(trim($_POST['password']));
 
if ((preg_match('/'.$version.'/i', $_SERVER['HTTP_USER_AGENT'])))
{
    if (($Arg == 'auth') && ($Login !== null) && ($Pass !== null)) 
    {
        $result = mysql_query("SELECT $db_password FROM `$db_table` WHERE $db_name='$Login'") or die ("AuthError1");
        $res = mysql_fetch_array($result);
        
        $hash = $res[$db_passw];
        $session = rand(99999, 9999999999);
        $query = mysql_query("UPDATE `$db_table` SET $db_sess'$session' WHERE $db_name='$Login'") or die ("AuthError2");
        
            if ($password == $hash) 
            {
                echo $hash.'<>'.$Login.'<>'.$session;
            }
            else 
            {
                echo 'Bad Login';
            }
    
        }
}   
else 
{
    die ('LOL');
}
Буду рад если объясните как построить post запрос.

Заранее спасибо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2015, 22:25
Ответы с готовыми решениями:

Формирование POST-запроса
Всем привет! Пишу программу, которая могла бы загружать фотографии во вконтач. В документации...

Отправка Post запроса на https сайт
Ещё раз добрвый день форумчане.Опять возникла проблема нужно отправить post запрос на https сайт...

Отправка POST запроса с использованием SSL
Салют. У меня есть приложение, которое отправляет POST запрос с идентификатором на сервис и...

Авторизация на сайте посредством Post запроса
Авторизация на сайте по средствам Post запроса На сайте есть форма входа: &lt;form...

57
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.01.2016, 17:38 21
Author24 — интернет-сервис помощи студентам

Не по теме:

tezaurismosis, А по чему через at() ?



Добавлено через 1 минуту
Wolf_Lone, Есть же QRegExp
0
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
04.01.2016, 17:44 22
Avazart, да просто, можно было бы и через квадратные скобки
Честно говоря, поставил без задней мысли, а теперь увидел в справке
T & QList::operator[](int i)
Returns the item at index position i as a modifiable reference. i must be a valid index position in the list (i.e., 0 <= i < size()).

If this function is called on a list that is currently being shared, it will trigger a copy of all elements. Otherwise, this function runs in constant time. If you do not want to modify the list you should use QList::at().
Но это так, к слову. Список здесь совместному доступу не подвергается, так что разницы нет.
0
Avazart
04.01.2016, 17:58
  #23

Не по теме:

Да это Qt-шная неадекватность, как в STL проверка границ должна осуществлятся и выброс исключения, а эти влепили "модифицируемость"

0
7 / 7 / 0
Регистрация: 08.10.2015
Сообщений: 126
04.01.2016, 21:43  [ТС] 24
Буду знать, большое спасибо за толковое разьяснение
Цитата Сообщение от tezaurismosis Посмотреть сообщение
В Qt Creator можно встроить справку по нажатию F1, рекомендую эту кнопку.
Добавлено через 2 часа 29 минут
Понимаю что в какой-то степени вопрос глупый, но я не могу понять как из
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void MainWindow::replyFinished()
{
    QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
    if (reply->error()== QNetworkReply::NoError)
    {
        QByteArray content= reply->readAll();
        QTextCodec *codec = QTextCodec::codecForName("cp1251");
        QString Data= codec->toUnicode(content.data());
//        ui->plainTextEdit->setPlainText(Data);
        QStringList lst = Data.split("<>");
        QString LoginS = lst.at(0);
        QString PasswordS = lst.at(1);
        QString Session = lst.at(2);
        QString Group = lst.at(3);
 
    }
    else qDebug()<<reply->errorString();
 
    reply->deleteLater();
}
этой ф-ции вытащить переменную Data и передать её
C++ (Qt)
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
void MainWindow::on_LoginBtn_clicked()
{
    QNetworkAccessManager* manager= new QNetworkAccessManager(this);
    QByteArray Request;
   QUrl site("http://83.167.111.21/launcher/auth.php");
   QString Login= ui->LineEditLogin->text();
   QString Password= ui->LineEditPass->text();
   QString Version= "Launcher Wolf v0.1";
 
   QByteArray postData;
   postData+= "a=auth" ;
   postData+= "&";
   postData+= "user=" + QUrl::toPercentEncoding(Login.toUtf8() );
   postData+= "&";
   postData+= "password=" + QUrl::toPercentEncoding(Password.toUtf8() );
 
   QNetworkRequest request(site);
   request.setHeader(QNetworkRequest::UserAgentHeader, Version);
   request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
 
 
   QNetworkReply* reply= manager->post(request, postData);
 
   connect (reply, SIGNAL(finished()),this, SLOT(replyFinished()));
 
   if (Login == LoginS && Password == PasswordS)
   {
//       Launcher *launch = new Launcher();
//       launch->show();
//       close();
   }
   else if (Login != LoginS) 
   {
       QMessageBox::critical(0, "Ошибка", "Не верный логин!");
   }
   else if (Password != PasswordS) 
   {
       QMessageBox::critical(0, "Ошибка", "Не верный пароль!");
   }
   else QMessageBox::critical(0, "Ошибка", "Причина ошибки не известна");
 
 
}
суда
Буду рад объяснениям
0
7 / 7 / 0
Регистрация: 08.10.2015
Сообщений: 126
06.01.2016, 15:17  [ТС] 25
Не найдя как таки вытащить данные из слота я сделал обработку в самом слоте, вот что получилось
C++ (Qt)
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
void MainWindow::replyFinished()
{
    QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
    if (reply->error()== QNetworkReply::NoError)
    {
        QByteArray content= reply->readAll();
        QTextCodec *codec = QTextCodec::codecForName("cp1251");
        QString Login= ui->LineEditLogin->text();
        QString Password= ui->LineEditPass->text();
        QString Data= codec->toUnicode(content.data());
        QStringList lst = Data.split("<>");
        QString LoginS = lst.at(0);
        QString PasswordS = lst.at(1);
        QString Session = lst.at(2);
        QString Group = lst.at(3);
        if (Login == LoginS && Password == PasswordS)
        {
            Launcher *launch = new Launcher();
            launch->show();
            close();
        }
        else if (Login != LoginS)
        {
            QMessageBox::critical(0, "Ошибка", "Не верный логин!");
        }
        else if (Password != PasswordS)
        {
            QMessageBox::critical(0, "Ошибка", "Не верный пароль!");
        }
        else QMessageBox::critical(0, "Ошибка", "Причина ошибки не известна");
 
    }
    else qDebug()<<reply->errorString();
 
    reply->deleteLater();
}
Всё работает как часы. Если как-то может сделать код лучше или есть к нему замечания я готов их выслушать/просчитать.
Если нет, на сим тему можно считать закрытой, Авторизация по средствам POST готова и функционирует.

Добавлено через 2 часа 11 минут
Правда проблема в этом решение есть.
Программа падает если введены не верные данные и поэтому их всё равно нужно как-то из функции вытащить и передать на функцию кнопки.
0
Заблокирован
10.01.2016, 03:15 26
а может быть попробовать c++ qt webkit
0
7 / 7 / 0
Регистрация: 08.10.2015
Сообщений: 126
10.01.2016, 19:31  [ТС] 27
Цитата Сообщение от poss Посмотреть сообщение
а может быть попробовать c++ qt webkit
У вы нет, через webkit не катит
Мне нужно знать как нужно нужно переписать код чтобы программа не подала с ошибкой
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
11.01.2016, 18:41 28
Wolf_Lone, на какое место указывает отладчик при падении?
0
7 / 7 / 0
Регистрация: 08.10.2015
Сообщений: 126
11.01.2016, 22:42  [ТС] 29
Вот такая тема в отладчике
Миниатюры
Авторизация посредством POST-запроса  
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
11.01.2016, 23:53 30
Wolf_Lone, а что это он ассемблерный код показывает? В релизе соброно что ли?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.01.2016, 00:04 31
Wolf_Lone, В режиме отладки пройдитесь. Может стоит поставить брекпоинты и в пошаговом режиме.
0
7 / 7 / 0
Регистрация: 08.10.2015
Сообщений: 126
12.01.2016, 12:22  [ТС] 32
Поставил точку до предполагаемого места сбоя, отладчик не остановился и выдал ошибку.
Миниатюры
Авторизация посредством POST-запроса  
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.01.2016, 13:06 33
Wolf_Lone, Ну так что? Самому не догадаться в чем дело? Или так тяжело посмотреть строку 510 и где там QList::at() вызывается?
0
7 / 7 / 0
Регистрация: 08.10.2015
Сообщений: 126
12.01.2016, 13:24  [ТС] 34
Цитата Сообщение от Avazart Посмотреть сообщение
тяжело посмотреть строку 510
Вы хотите чтобы я полез в Ядро QT ?
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
12.01.2016, 14:07 35
Wolf_Lone, нужно проверять размер lst, прежде чем вызывать at.
0
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
12.01.2016, 14:12 36
Цитата Сообщение от Wolf_Lone Посмотреть сообщение
Поставил точку до предполагаемого места сбоя, отладчик не остановился и выдал ошибку
Значит ошибка раньше этого места. Проверьте содержимое переменных Data и lst.
0
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 88
12.01.2016, 14:21 37

Не по теме:

Цитата Сообщение от tezaurismosis Посмотреть сообщение
QString Data = "test<>test<>794542767<>2";
QStringList lst = Data.split("<>");
QString login = lst.at(0);
QString password = lst.at(1);
QString session = lst.at(2);
QString group = lst.at(3);
В Qt Creator можно встроить справку по нажатию F1, рекомендую эту кнопку.
Давно хотел разобраться с разделителем. Да и к QStringList как-то настороженно относился. Оказывается, всё просто! Спасибо!



Добавлено через 7 минут
Wolf_Lone, не могли бы выложить проект. У самого желание возникло сделать. Хоть ни разу не сталкивался с этой темой, но благодаря ответам в этой теме, стал вникать.
0
7 / 7 / 0
Регистрация: 08.10.2015
Сообщений: 126
12.01.2016, 16:03  [ТС] 38
Цитата Сообщение от avovana Посмотреть сообщение
Да и к QStringList как-то настороженно относился. Оказывается, всё просто! Спасибо!
Радует что тема которую я поднял кому-то и чем-то помогает. Касательно я весь используемый код выложил выше, не составит труда запихнуть его в новый проект и немного модернизировать под этот проект, но если очень нужно скину ссылку на облако и если модератор не будет против.
0
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
12.01.2016, 16:14 39
Цитата Сообщение от Wolf_Lone Посмотреть сообщение
если очень нужно скину ссылку на облако и если модератор не будет против.
Если решитесь выложить проект, то загружайте файл на форум. Если архив получается больше 10 Мб, удалите экзешник и отладочные символы (pdb, mdb-файлы).
1
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 88
12.01.2016, 17:10 40
Цитата Сообщение от Wolf_Lone Посмотреть сообщение
Радует что тема которую я поднял кому-то и чем-то помогает. Касательно я весь используемый код выложил выше, не составит труда запихнуть его в новый проект и немного модернизировать под этот проект, но если очень нужно скину ссылку на облако и если модератор не будет против.
Если не сложно, буду очень рад попробовать!
0
12.01.2016, 17:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2016, 17:10
Помогаю со студенческими работами здесь

Авторизация в Instagram посредством POST
Необходимо авторизоваться в Instagram &quot;юзерскими&quot; методами, т.е. через...

Авторизация с использованием post запроса на сайте
Моя первая попытка авторизации на сайте. import requests def autoriz(): session =...

Авторизация на сайте ппри помощи post-запроса
На сайте есть форма входа: &lt;td class=&quot;bc&quot;&gt;&lt;table width=&quot;100%&quot; border=&quot;0&quot;...

(xNet.dll) Ответ POST-запроса (авторизация на одноклассниках)
Здравствуйте. Пытаюсь осуществить авторизацю на odnoklassniki.ru с помощью библиотеки xNet....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru