QWebEngineView перехват тела запроса - PullRequest
0 голосов
/ 05 марта 2019

Пользователь, использующий QWebEngineView в моем приложении, заполняет некоторую форму.Эта форма использует почтовый метод для отправки данных на сервер.Как получить параметры из запроса тела пользователя?

Я нашел такую ​​вещь как QWebEngineUrlRequestInterceptor , но она работает только для URL.

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Вы можете использовать QWebEnginePage :: acceptNavigationRequest .

Всякий раз, когда форма отправляется, вы можете получить содержимое ввода с помощью JavaScript, а затем принять запрос для продолжения в обычном режиме.

0 голосов
/ 06 марта 2019

Как и Анмол Гаутам сказал, что вам нужно переопределить функцию QWebEnginePage :: acceptNavigationRequest и получить необходимые данные с помощью JavaScript.

Вот пример того, как это сделать:

mywebpage.h

#include <QWebEnginePage>

class MyWebPage : public QWebEnginePage
{
    Q_OBJECT
public:
    explicit MyWebPage(QWebEngineProfile *profile = Q_NULLPTR, QObject *parent = Q_NULLPTR);

protected:
    bool acceptNavigationRequest(const QUrl & url, QWebEnginePage::NavigationType type, bool isMainFrame);
}

mywebpage.cpp

MyWebPage::MyWebPage(QWebEngineProfile *profile, QObject *parent):QWebEnginePage(profile, parent),
{
//...
}

bool MyWebPage::acceptNavigationRequest(const QUrl & url, QWebEnginePage::NavigationType type, bool isMainFrame)
{
    if(type == QWebEnginePage::NavigationTypeFormSubmitted)
    {
        qDebug() << "[FORMS] Submitted" <<  url.toString();
        QString jsform = "function getformsvals()"
                         "{var result;"
                          "for(var i = 0; i < document.forms.length; i++){"
                         "for(var x = 0; x < document.forms[i].length; x++){"
                         "result += document.forms[i].elements[x].name + \" = \" +document.forms[i].elements[x].value;"
                         "}}"
                         "return result;} getformsvals();";

        this->runJavaScript(jsform, [](const QVariant &result){ qDebug() << "[FORMS] found: " << result; });
    }
    return true;
}

use QWebEngineView ::setPage для установки вашего подкласса WebPage в WebView перед вызовом функции загрузки WebViews.

Вот ссылка для получения дополнительной информации о HTML DOM формах Collection

...