如何使用QWebEngineUrlRequestInterceptor [英] How to use QWebEngineUrlRequestInterceptor

查看:3139
本文介绍了如何使用QWebEngineUrlRequestInterceptor的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要拦截我们的WebEngine qml组件中的请求在我们的Qt应用程序。



我已经找到文档QWebEngineUrlRequestInterceptor这似乎只做这里 http://doc.qt.io/qt-5/qwebengineprofile.html#details 此处 http://doc.qt.io/qt-5/qwebengineurlrequestinterceptor。 html#details 。但是我还没有找到任何关于如何在Qt / C ++中这样做的代码示例。



任何帮助是值得赞赏的。

解决方案

通过这篇文章的帮助来管理拼图: https://forum.qt.io/topic/69135/how-to-send-network-requests-in-qwebengine/2



这是我连接QWebEngineUrlRequestInterceptor的解决方案:



.h文件

  class WebUrlRequestInterceptor:public QWebEngineUrlRequestInterceptor 
{
Q_OBJECT

public:
WebUrlRequestInterceptor p = Q_NULLPTR);
void interceptRequest(QWebEngineUrlRequestInfo& info);
};

.cpp文件

  WebUrlRequestInterceptor :: WebUrlRequestInterceptor(QObject * p)
:QWebEngineUrlRequestInterceptor(p)
{

}
void WebUrlRequestInterceptor :: interceptRequest(QWebEngineUrlRequestInfo& ; info){
QString rsrct =;
switch(info.resourceType()){
case 0:rsrct =ResourceTypeMainFrame = 0,//顶级页面; break;
case 1:rsrct =ResourceTypeSubFrame,// frame or iframe; break;
case 2:rsrct =ResourceTypeStylesheet,//一个CSS样式表; break;
case 3:rsrct =ResourceTypeScript,//外部脚本; break;
case 4:rsrct =ResourceTypeImage,// a image(jpg / gif / png / etc); break;
case 5:rsrct =ResourceTypeFontResource,// a font; break;
case 6:rsrct =ResourceTypeSubResource,// an other subresource。; break;
case 7:rsrct =ResourceTypeObject,//插件的对象(或嵌入)标签,; break;
case 8:rsrct =ResourceTypeMedia,// a media resource。; break;
case 9:rsrct =ResourceTypeWorker,//专用工作程序的主要资源。
case 10:rsrct =ResourceTypeSharedWorker,//共享worker的主资源。
case 11:rsrct =ResourceTypePrefetch,//明确请求的预取; break;
case 12:rsrct =ResourceTypeFavicon,// a favicon; break;
case 13:rsrct =ResourceTypeXhr,// a XMLHttpRequest; break;
case 14:rsrct =ResourceTypePing,// ping请求< a ping>; break;
case 15:rsrct =ResourceTypeServiceWorker,//服务工作者的主要资源。
case 16:rsrct =ResourceTypeUnknown; break;

默认值:rsrct =未知类型; break;
}

qDebug()<<\t<< Q_FUNC_INFO<<:\\\
\t\t< WebUrlRequestInterceptor :: interceptRequest<< info.requestMethod()
<<\r\\\
<< info.requestUrl()<< rsrct<<\r\\\
;

  WebUrlRequestInterceptor * wuri = new WebUrlRequestInterceptor(); 
QWebEngineProfile :: defaultProfile() - > setRequestInterceptor(wuri);


I need to intercept requests made in our WebEngine qml component in our Qt application.

I have found documentation on QWebEngineUrlRequestInterceptor which seems to do just this here http://doc.qt.io/qt-5/qwebengineprofile.html#details and here http://doc.qt.io/qt-5/qwebengineurlrequestinterceptor.html#details. However I haven't found any code examples on how to do this in Qt/C++.

Any help is appreciated.

解决方案

Managed to puzzle it together with the help of this post: https://forum.qt.io/topic/69135/how-to-send-network-requests-in-qwebengine/2

This is my solution to hook up a QWebEngineUrlRequestInterceptor:

.h file

class WebUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
{
    Q_OBJECT

public:
    WebUrlRequestInterceptor(QObject *p = Q_NULLPTR);
    void interceptRequest(QWebEngineUrlRequestInfo &info);
};

.cpp file

WebUrlRequestInterceptor::WebUrlRequestInterceptor(QObject *p)
  :QWebEngineUrlRequestInterceptor(p)
{

}
void WebUrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) {
    QString rsrct = "";
    switch(info.resourceType()){
        case 0:rsrct="ResourceTypeMainFrame = 0, // top level page";break;
        case 1:rsrct="ResourceTypeSubFrame, // frame or iframe";break;
        case 2:rsrct="ResourceTypeStylesheet, // a CSS stylesheet";break;
        case 3:rsrct="ResourceTypeScript, // an external script";break;
        case 4:rsrct="ResourceTypeImage, // an image (jpg/gif/png/etc)";break;
        case 5:rsrct="ResourceTypeFontResource, // a font";break;
        case 6:rsrct="ResourceTypeSubResource, // an other subresource.";break;
        case 7:rsrct="ResourceTypeObject, // an object (or embed) tag for a plugin,";break;
        case 8:rsrct="ResourceTypeMedia, // a media resource.";break;
        case 9:rsrct="ResourceTypeWorker, // the main resource of a dedicated worker.";break;
        case 10:rsrct="ResourceTypeSharedWorker, // the main resource of a shared worker.";break;
        case 11:rsrct="ResourceTypePrefetch, // an explicitly requested prefetch";break;
        case 12:rsrct="ResourceTypeFavicon, // a favicon";break;
        case 13:rsrct="ResourceTypeXhr, // a XMLHttpRequest";break;
        case 14:rsrct="ResourceTypePing, // a ping request for <a ping>";break;
        case 15:rsrct="ResourceTypeServiceWorker, // the main resource of a service worker.";break;
        case 16:rsrct="ResourceTypeUnknown";break;

        default : rsrct="Unknown type";break;
    }

  qDebug()<<"\t"<<Q_FUNC_INFO<<":\n\t\t" << "WebUrlRequestInterceptor::interceptRequest    " <<info.requestMethod()
         <<"\r\n  "<<info.requestUrl()<<"   "<<rsrct      <<"\r\n";

}

main.cpp file

WebUrlRequestInterceptor *wuri = new WebUrlRequestInterceptor();
    QWebEngineProfile::defaultProfile()->setRequestInterceptor(wuri);

这篇关于如何使用QWebEngineUrlRequestInterceptor的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆