QWebEngineUrlRequestInterceptor用来拦截网络请求,例如如果需要查看网页中发生了哪些get/post请求。
QWebEngineUrlRequestInterceptor是一个抽象类,意味着需要子类化它才能得到所需的内容,使用方法如下:
头文件:
- class WebUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
- {
- Q_OBJECT
- public:
- WebUrlRequestInterceptor(QObject *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, // 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 15:rsrct="ResourceTypeServiceWorker, // the main resource of a service worker.";break;
- case 16:rsrct="ResourceTypeUnknown";break;
-
- default : rsrct="Unknown type";break;
- }
-
- qDebug()<<" "<<Q_FUNC_INFO<<":
- " << "WebUrlRequestInterceptor::interceptRequest " <<info.requestMethod()
- <<"
- "<<info.requestUrl()<<" "<<rsrct <<"
- ";
-
- }
为QWebEngineView设置拦截器:
- RequestInterceptor *interceptor = new RequestInterceptor(webView);
- webView->page()->profile()->setRequestInterceptor(iterceptor);