2016-10-28 16 views
1

QtでURLを読み込むダイアログを作成しようとしています(これはエンドユーザーに公開したくないので、Dialogです)。ユーザーがページの資格情報を入力すると、サーバーは取得したいリダイレクトURLを返します。これどうやってするの?QWebEngineViewでサーバーの応答をキャプチャします。

QWebViewはQNetworkAccessManagerオブジェクトを持っていたため、これを簡単に行うことができました。しかし、QtWebEngineでは、QWebEngineViewクラスにはこの機能がありません。前者は、QNetworkRequestクラスを使用してHTTPヘッダーを任意の要求に設定し、QWebViewでこれらの特定の要求を要求にロードすることも許可しました。 QWebEngineViewでどうすればいいですか?

答えて

6

のQt 5.6あなたはQWebEngineViewで達成しようとしている何のために提案された解決策がQWebEngineUrlRequestInterceptorあるので:

はQWebEngineUrlRequestInterceptorインタフェースを実装し、プロファイルにインターセプタをインストールし、傍受阻止、そして彼らの前にURLリクエストを修正することができますChromiumのネットワーキングスタックに到達します。

それはあなたが望む結果を得るためにそれをサブクラス化する必要があることを意味する抽象クラスである:

#include <QWebEngineUrlRequestInterceptor> 
#include <QDebug> 

class RequestInterceptor : public QWebEngineUrlRequestInterceptor 
{ 
public: 
    explicit RequestInterceptor(QObject * parent = Q_NULLPTR) : QWebEngineUrlRequestInterceptor(parent) {} 
    virtual void interceptRequest(QWebEngineUrlRequestInfo & info) Q_DECL_OVERRIDE; 
}; 

void RequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo & info) 
{ 
    // Intercepting the requested URL 
    QUrl url = info.requestUrl(); 
    qDebug() << "Request URL: " << url; 

    // Optionally redirect the request URL but it only works for requests 
    // without payload data such as GET ones 
    info.redirect(QUrl("https://www.google.com")); 

    // Set HTTP header 
    QByteArray httpHeaderName = "SomeHeaderName"; 
    QByteArray httpHeaderValue = "SomeHeaderValue"; 
    info.setHttpHeader(httpHeaderName, httpHeaderValue); 
} 

は、その後、あなたは、このように、特定のQWebEnginePageためQWebEngineProfileにこのインターセプタへのポインタを登録する必要があります:

QWebEngineView * view = new QWebEngineView; 
RequestInterceptor * interceptor = new RequestInterceptor(view); 
QWebEngineProfile * profile = new QWebEngineProfile(view); 
profile->setRequestInterceptor(interceptor); 
QWebEnginePage * page = new QWebEnginePage(profile, view); 
view->setPage(page); 
関連する問題