Russian Qt Forum
Апрель 26, 2024, 03:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / Работа с сетью / QNetworkAccessManager нет протокола FTP : Апрель 17, 2021, 20:12
Привет.
Использую Qt 5.15.2
Хочу скачать по FTP файл
Советуют использовать QNetworkAccessManager
Получаю ошибку 301, то есть не поддерживаемый протокол (имеется ввиду ftp)
Тогда выполнил команду QNetworkAccessManager::supportedSchemes()
что бы посмотреть какие протоколы он поддерживает.
В итоге вижу такие протоколы:
file
qrc
http
https
data


Среди этого списка нет ftp

Вопрос, почему его нет? Я думал он из коробки должен идти.
Подскажите как его активировать?
2  Qt / Базы данных / Re: Драйвер для MariaDB (Ubuntu 18) : Ноябрь 23, 2020, 21:46
какаято вакханалия версий штатное qt 5.9, поставлено 5.11.2, креатор еще свежее
в составе qt драйвера БД уже собран, но при запуске он не находится


У меня есть папки
/home/rudi/Qt/5.9.9
/home/rudi/Qt/5.11.2


Пока что взял и переименовал папку
/home/rudi/Qt/5.9.9
на другое имя
/home/rudi/Qt/5.9.9__old

Сборка драйвера по прежнему не запускается как надо...
Но зато программа подключается к базе MariaDB без ошибок.
 Смеющийся
3  Qt / Базы данных / Драйвер для MariaDB (Ubuntu 18) : Ноябрь 22, 2020, 18:51
Всем привет.
Есть код подключения к БД MariaDB

Код:
     QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "mydb");
     db.setHostName("localhost");
     db.setDatabaseName("tc-db-main");
     db.setUserName("root");
     db.setPassword("12345");
     bool ok = db.open();

Получаю ошибку
Цитировать
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7

Из ошибки понятно что нужен драйвер для MySQL
У меня Ubuntu 18.04.4 LTS




Нашел где лежат файлы MySql
/usr/include/mysql


иду по пути где лежат плагины
/home/rudi/Qt/5.11.2/Src/qtbase/src/plugins/sqldrivers/mysql

Оттуда запускаю кманду
qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/x86_64-linux-gnu -lmysqlclient" mysql.pro


Получаю такой вывод
/home/rudi/Qt/5.11.2/Src/qtbase/src/plugins/sqldrivers/qsqldriverbase.pri:4: Unknown replace function: shadowed
WARNING: /home/rudi/Qt/5.11.2/Src/qtbase/src/plugins/sqldrivers/qsqldriverbase.pri:4: Unable to find file for inclusion /qtsqldrivers-config.pri
WARNING: /home/rudi/Qt/5.11.2/Src/qtbase/src/plugins/sqldrivers/qsqldriverbase.pri:7: Unable to find file for inclusion qt_plugin
Project MESSAGE: Warning: unknown QT: core-private
Project MESSAGE: Warning: unknown QT: sql-private


Подскажите что не так? Как мне сделать драйвер?
4  Qt / Вопросы новичков / Re: QNetworkManager внутри QtConcurrent:map : Май 09, 2020, 16:14
QNAM уже использует треды внутри, нет никакой нужды его параллелить снаружи.
В моем случае есть нужда, использование QNAM это лишь верхушка айсберга. Логика подразумевает неоднократный вызов QNAM и обработка его ответа, запросы разные, и на обработку каждого ответа своя логика...
5  Qt / Вопросы новичков / QNetworkManager внутри QtConcurrent:map : Май 09, 2020, 10:36
Привет.
Имеем класс Worker который унаследован от QObject в котором идет работа с QNetworkAccessManager
Так же есть класс Master который запускает работу  Worker через вызов QtConcurrent:map

Заметил такую ситуацию, что я не получаю ответ от QNetworkAccessManager через сигнал QNetworkReply::readyRead
Но... стоит мне внутри метода Worker  реализовать  QEventLoop
Код:
QNetworkReply *reply = this->manager->get(request);
QEventLoop loop;
loop.exec();
То ответ от  QNetworkAccessManager  получаю.

Выходит, из этой документации https://doc.qt.io/qt-5/threads-technologies.html
Только QThread способен на Thread can run an event loop

То есть внутри потока, (созданный QtConcurrent:map)  нет цикла обработки событий без моего QEventLoop и поток просто уничтожается по достижении конца метода...
Походу для моего случая лучше испольлзовать moveToThread
6  Qt / Вопросы новичков / GET запрос и JavaScript : Апрель 17, 2020, 09:19
Привет.  Улыбающийся
Есть ссылка https://www.vseinstrumenti.ru/search_main.php?what=jtc-zn12
Если пройти по ней в браузере, сайт покажет результат поиска.

Используя QNetworkAccessManager  пытаюсь сделать GET запрос по этой ссылке, но не получается получить результат поиска.
В ответ получаю JS код.  Злой

Народ, помогите... как получить HTML результата поиска?  Строит глазки
JS скрипт там пытается что-то вычислить, установить cookie и сделать редирект на страницу результат (это своего рода защита)
Qt Script не смог выполнить этот JS код... либо я натупил... буду раз если попробуете

7  Qt / Работа с сетью / Re: Как выполнить JS код на QT : Июль 17, 2019, 22:00
возьми любую программа для захвата сетевых пакетов (fiddler, Charles proxy, Wireshark) и посмотри какие запросы (все детали — заголовки и т.д.) отправляются из каждой ОС. Возможно, на каждой ОС разный User-Agent.
User-Agent - передается в коде программы, он не может быть другим на разных ОС, QNetworkAccessManager его определяет.
Но вот по поводу остальных заголовков посмотреть можно.
8  Qt / Работа с сетью / Re: Как выполнить JS код на QT : Июль 16, 2019, 23:22
Ответа не нашел...
Но удивительно то, что для разных ОС один и тот же код отдает разные ответы.
Решил запускать через docker контейнер версию Linux, так как выполнение кода в Linux решает проблему с JS
9  Qt / Работа с сетью / Как выполнить JS код на QT : Июль 14, 2019, 15:43
Привет. Использую Qt5.
Пишу консольную программу парсер сайта https://www.vseinstrumenti.ru/
Использую QNetworkAccessManager.
На сайте стоит защита, при заходе на их страницу они отправляют на сайт прокладку например по адресу
https://ohio8.vchecks.me/share/sWWtMUH7cqM1?sid=2588&scheme=https&host=www.vseinstrumenti.ru&uri=%2f%3futm_referrer%3d&t=1563107574249&sad=v%2fuQ1wLA%3d%3d&uid=s7RKQDx4LDWnaSFq&uct=1563107574249&kct=0&m=2&ver=7&flags=2176&ua=776215760362579538&v=5F5kK4Iq9WBf_xq6ZAsJQQ
Там идет выполнение JS кода, а именно выполняется JS код который генерирует что-то вроде секрета с которым идет перенаправление назад на сайт  https://www.vseinstrumenti.ru/
И таким образом проверка пройдена.

Вопрос №1, почему один и тот же С++ код, скомпилированный на разных ОС, а именно Windows и Linux (Ubuntu)
отдает разный ответ при переходе по выше указанной ссылке.
Разница ответов (Response) в том, что если программа исполняется в Linux то Response НЕ содержит JS функцию отвечающую за генерацию секрета, вместо нее в JS код уже есть готовый результат её генерирования. А вот в Windows наоборот, нет готового секрета, но есть функция которая этот секрет генерирует.
Как такое вообще возможно... код же на с++ один и тот же...

Вопрос № 2
Как в QT можно выполнить JS код полученный в Response  учитывая что программа консольная.
QScriptEngine не помог, видимо JS код для него слишком сложный.


Доп инфо
Так выглядит Response для Linux
Код:
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta http-equiv="refresh" content="10;URL=/ciez2a">
</head>
<body>
  <script type="text/javascript">
    var ipp = {
setCookie:function()
{
document.cookie="ipp_key=v1563109400764/v3394bd940fb9f20d860d271638eca2afa04ab3/LBgoFoc1kjRqgOKpylxeJA==; path=/;";
document.cookie="ipp_uid=1563109400764/XmY5i8ip0xP6CnMe/luPzUft7syB0zcwZ45odDg==; expires=Tue, 31 Dec 2030 23:59:59 GMT; path=/;";
document.cookie="ipp_uid1=1563109400764; expires=Tue, 31 Dec 2030 23:59:59 GMT; path=/;";
document.cookie="ipp_uid2=XmY5i8ip0xP6CnMe/luPzUft7syB0zcwZ45odDg==; expires=Tue, 31 Dec 2030 23:59:59 GMT; path=/;";
},
makeUrl:function(url)
{
url += "fa821dba_ipp_key=v1563109400764%2fv3394bd940fb9f20d860d271638eca2afa04ab3%2fLBgoFoc1kjRqgOKpylxeJA%3d%3d" + "&" + "fa821dba_ipp_uid=1563109400764%2fXmY5i8ip0xP6CnMe%2fluPzUft7syB0zcwZ45odDg%3d%3d" + "&" + "fa821dba_ipp_uid1=1563109400764" + "&" + "fa821dba_ipp_uid2=XmY5i8ip0xP6CnMe%2fluPzUft7syB0zcwZ45odDg%3d%3d";
return url;
}
};

    location.href=ipp.makeUrl("https://www.vseinstrumenti.ru/search_main.php?what=%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B5%D1%80+1/2%22+%D0%A5+8MM+JTC+/1&utm_referrer=https%3a%2f%2fwww.vseinstrumenti.ru%2f&");
  </script>
</body>
</html>

А так выглядит Rsponse для Windows
https://codepen.io/rudireg/pen/GbaQRX



Страниц: [1]

Страница сгенерирована за 0.059 секунд. Запросов: 24.