Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QtWebEngine
  4. How to send network requests in QWebEngine

How to send network requests in QWebEngine

Scheduled Pinned Locked Moved Unsolved QtWebEngine
webengine qt5networkaccessmawebkit
3 Posts 3 Posters 5.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    d1.psy
    wrote on 10 Jul 2016, 15:14 last edited by d1.psy 7 Oct 2016, 15:15
    #1

    Since QWebEngine does not interact with QNetworkAccessManager, is there any other way to send network requests and receive replies in QWebEngine?
    For example, when WebKit was used, code looked like this

    QNetworkAccessManager *p =  getView()->page()->networkAccessManager();
    
    1 Reply Last reply
    0
    • M Offline
      M Offline
      mousemao
      wrote on 10 Jul 2016, 22:16 last edited by
      #2

      http://doc.qt.io/qt-5/qtwebengine-overview.html
      Qt WebEngine Core provides an API shared by Qt WebEngine and Qt WebEngine Widgets for handling URL requests issued for the networking stack of Chromium and for accessing its HTTP cookies.

      Implementing the QWebEngineUrlRequestInterceptor interface and installing the interceptor on a profile enables intercepting, blocking, and modifying URL requests (QWebEngineUrlRequestInfo) before they reach the networking stack of Chromium.

      A QWebEngineUrlSchemeHandler can be registered for a profile to add support for custom URL schemes. Requests for the scheme are then issued to QWebEngineUrlSchemeHandler::requestStarted() as QWebEngineUrlRequestJob objects.

      The QWebEngineCookieStore class provides functions for accessing HTTP cookies of Chromium. The functions can be used to synchronize cookies with QNetworkAccessManager, as well as to set, delete, and intercept cookies during navigation.

      So,I Overwrite QWebEngineUrlRequestInfo:

      #ifndef WEBURLREQUESTINTERCEPTOR_H
      #define WEBURLREQUESTINTERCEPTOR_H
      
      #include <QWebEngineUrlRequestInterceptor>
      
      class WebUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
      {
          Q_OBJECT
      
      public:
          WebUrlRequestInterceptor(QObject *p = Q_NULLPTR);
          void interceptRequest(QWebEngineUrlRequestInfo &info);
      };
      
      #endif // WEBURLREQUESTINTERCEPTOR_H
      
      #include "weburlrequestinterceptor.h"
      #include <QDebug>
      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="未知类型";break;
          }
      
        qDebug()<<"\t"<<Q_FUNC_INFO<<":\n\t\t" << "WebUrlRequestInterceptor::interceptRequest    " <<info.requestMethod()
               <<"\r\n  "<<info.requestUrl()<<"   "<<rsrct      <<"\r\n";
      
      }
      
      

      overWrite QWebEnginePage:

      WebPage::WebPage(QWebEngineProfile *profile, QObject *parent)
          : QWebEnginePage(profile, parent)
      {
      
          WebUrlRequestInterceptor *wuri = new WebUrlRequestInterceptor();
          profile->setRequestInterceptor(wuri);
      
      }
      
      
      

      And then,I can intercepting request.But I can't receive replies . Can you?

      R 1 Reply Last reply 2 Aug 2016, 14:58
      0
      • M mousemao
        10 Jul 2016, 22:16

        http://doc.qt.io/qt-5/qtwebengine-overview.html
        Qt WebEngine Core provides an API shared by Qt WebEngine and Qt WebEngine Widgets for handling URL requests issued for the networking stack of Chromium and for accessing its HTTP cookies.

        Implementing the QWebEngineUrlRequestInterceptor interface and installing the interceptor on a profile enables intercepting, blocking, and modifying URL requests (QWebEngineUrlRequestInfo) before they reach the networking stack of Chromium.

        A QWebEngineUrlSchemeHandler can be registered for a profile to add support for custom URL schemes. Requests for the scheme are then issued to QWebEngineUrlSchemeHandler::requestStarted() as QWebEngineUrlRequestJob objects.

        The QWebEngineCookieStore class provides functions for accessing HTTP cookies of Chromium. The functions can be used to synchronize cookies with QNetworkAccessManager, as well as to set, delete, and intercept cookies during navigation.

        So,I Overwrite QWebEngineUrlRequestInfo:

        #ifndef WEBURLREQUESTINTERCEPTOR_H
        #define WEBURLREQUESTINTERCEPTOR_H
        
        #include <QWebEngineUrlRequestInterceptor>
        
        class WebUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
        {
            Q_OBJECT
        
        public:
            WebUrlRequestInterceptor(QObject *p = Q_NULLPTR);
            void interceptRequest(QWebEngineUrlRequestInfo &info);
        };
        
        #endif // WEBURLREQUESTINTERCEPTOR_H
        
        #include "weburlrequestinterceptor.h"
        #include <QDebug>
        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="未知类型";break;
            }
        
          qDebug()<<"\t"<<Q_FUNC_INFO<<":\n\t\t" << "WebUrlRequestInterceptor::interceptRequest    " <<info.requestMethod()
                 <<"\r\n  "<<info.requestUrl()<<"   "<<rsrct      <<"\r\n";
        
        }
        
        

        overWrite QWebEnginePage:

        WebPage::WebPage(QWebEngineProfile *profile, QObject *parent)
            : QWebEnginePage(profile, parent)
        {
        
            WebUrlRequestInterceptor *wuri = new WebUrlRequestInterceptor();
            profile->setRequestInterceptor(wuri);
        
        }
        
        
        

        And then,I can intercepting request.But I can't receive replies . Can you?

        R Offline
        R Offline
        redstoneleo
        wrote on 2 Aug 2016, 14:58 last edited by
        #3

        @mousemao I've made a feature request here https://bugreports.qt.io/browse/QTBUG-55074

        BTW, 大哥,你好~~

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved