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. setHttpHeader not wok in QWebEngineUrlRequestInfo
QtWS25 Last Chance

setHttpHeader not wok in QWebEngineUrlRequestInfo

Scheduled Pinned Locked Moved Unsolved QtWebEngine
12 Posts 3 Posters 609 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.
  • K KHOSRO

    i want change HttpHeader with setHttpHeader but not work
    i used this code
    i want to change cache-control :max_age :10000000
    but setHttpHeader not work
    and max-age is always 3600(1hour)

    import os
    from PySide2.QtCore import QEventLoop, Qt, QUrl,QByteArray
    from PySide2.QtWebChannel import QWebChannel
    from PySide2.QtWebEngineWidgets import QWebEngineView, QWebEnginePage, QWebEngineProfile
    from PySide2.QtWebEngineCore import QWebEngineUrlRequestInterceptor, QWebEngineUrlRequestInfo
    
    class CacheControlInterceptor(QWebEngineUrlRequestInterceptor):
        def interceptRequest(self, info: QWebEngineUrlRequestInfo):
            request_url = info.requestUrl().toString()
            print(f"Request URL: {request_url}")
    
            if info.resourceType() == QWebEngineUrlRequestInfo.ResourceTypeImage:
                # Set custom cache control
                info.setHttpHeader(QByteArray(b'Cache-Control'), QByteArray(b'public,max-age=10000000'))
    

    total code is :

    class MapWidget(QWebEngineView):
        """
        The MapWidget class is a QWebEngineView that houses the leaflet map.
        Since it is a QWidget, it can be added to any QLayout.
        """
    
        @property
        def page(self):
            return self._page
    
        @property
        def channel(self):
            return self._channel
    
        def __init__(self, use_file_absolute_path: bool = True, alternative_base_path: str = "", cache_path: str = ""):
            super().__init__()
            if use_file_absolute_path or len(alternative_base_path) == 0:
                self.base_path = os.path.dirname(os.path.abspath(__file__))
            else:
                self.base_path = alternative_base_path
    
            # Create a QWebEngineProfile and set the cache path
            self._profile = QWebEngineProfile.defaultProfile()
            if cache_path:
                self._profile.setCachePath(cache_path)
    
            self._page = QWebEnginePage(self._profile, self)
            self.setPage(self._page)
            self._channel = QWebChannel()
            self._page.setWebChannel(self._channel)
    
            # Set the interceptor
            self._interceptor = CacheControlInterceptor()
            self._profile.setRequestInterceptor(self._interceptor)
    
            self._loadPage()
            self.setContextMenuPolicy(Qt.NoContextMenu)
        def _get_page_path(self):
            return os.path.join(self.base_path, 'web', 'map.html')
        def _loadPage(self):
            html_path = self._get_page_path()
            # QEventLoop is used to make the page loading behave synchronously
            init_loop = QEventLoop()
            self._page.loadFinished.connect(init_loop.quit)
            self._page.load(QUrl().fromLocalFile(html_path))
            init_loop.exec_()
    
    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #2

    @KHOSRO said in setHttpHeader not wok in QWebEngineUrlRequestInfo:

    but setHttpHeader not work

    So, is info.setHttpHeader called?

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    K 1 Reply Last reply
    0
    • jsulmJ jsulm

      @KHOSRO said in setHttpHeader not wok in QWebEngineUrlRequestInfo:

      but setHttpHeader not work

      So, is info.setHttpHeader called?

      K Offline
      K Offline
      KHOSRO
      wrote on last edited by KHOSRO
      #3

      @jsulm no, i checked it now but not work
      ```

      def setHttpHeader(self, name, PySide6_QtCore_QByteArray=None, bytes=None, *args, **kwargs): # real signature unknown; NOTE: unreliably restored from __doc__ 
              """ setHttpHeader(self, name: Union[PySide6.QtCore.QByteArray, bytes], value: Union[PySide6.QtCore.QByteArray, bytes]) -> None """
              print('Hiiiiiiiiiiiiiii')
              pass
      
      it can not print 'Hiiiiiii'
      1 Reply Last reply
      0
      • jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #4

        Then that means that

        if info.resourceType() == QWebEngineUrlRequestInfo.ResourceTypeImage
        

        is never true.

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        K 1 Reply Last reply
        0
        • jsulmJ jsulm

          Then that means that

          if info.resourceType() == QWebEngineUrlRequestInfo.ResourceTypeImage
          

          is never true.

          K Offline
          K Offline
          KHOSRO
          wrote on last edited by KHOSRO
          #5

          @jsulm yesss
          this condition satisfy and it is

          print(info.resourceType())
                  if info.resourceType() == QWebEngineUrlRequestInfo.ResourceTypeImage:
                      # Set custom cache control
                      info.setHttpHeader(b'Cache-Control', b'max-age=31536000')
          

          outpu is :
          PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeImage

          and the QWebEngineUrlRequestInfo class is :

          class QWebEngineUrlRequestInfo(__Shiboken.Object):
              # no doc
              def block(self, shouldBlock): # real signature unknown; restored from __doc__
                  """ block(self, shouldBlock: bool) -> None """
                  pass
          
              def changed(self): # real signature unknown; restored from __doc__
                  """ changed(self) -> bool """
                  return False
          
              def firstPartyUrl(self): # real signature unknown; restored from __doc__
                  """ firstPartyUrl(self) -> PySide2.QtCore.QUrl """
                  pass
          
              def initiator(self): # real signature unknown; restored from __doc__
                  """ initiator(self) -> PySide2.QtCore.QUrl """
                  pass
          
              def navigationType(self): # real signature unknown; restored from __doc__
                  """ navigationType(self) -> PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType """
                  pass
          
              def redirect(self, url): # real signature unknown; restored from __doc__
                  """ redirect(self, url: PySide2.QtCore.QUrl) -> None """
                  pass
          
              def requestMethod(self): # real signature unknown; restored from __doc__
                  """ requestMethod(self) -> PySide2.QtCore.QByteArray """
                  pass
          
              def requestUrl(self): # real signature unknown; restored from __doc__
                  """ requestUrl(self) -> PySide2.QtCore.QUrl """
                  pass
          
              def resourceType(self): # real signature unknown; restored from __doc__
                  """ resourceType(self) -> PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType """
                  pass
          
              def setHttpHeader(self, name, value): # real signature unknown; restored from __doc__
                  """ setHttpHeader(self, name: PySide2.QtCore.QByteArray, value: PySide2.QtCore.QByteArray) -> None """
                  pass
          
              def __init__(self, *args, **kwargs): # real signature unknown
                  pass
              @staticmethod # known case of __new__
              def __new__(*args, **kwargs): # real signature unknown
                  """ Create and return a new object.  See help(type) for accurate signature. """
                  pass
              NavigationType = None # (!) real value is "<class 'PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType'>"
              NavigationTypeBackForward = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeBackForward
              NavigationTypeFormSubmitted = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeFormSubmitted
              NavigationTypeLink = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeLink
              NavigationTypeOther = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeOther
              NavigationTypeRedirect = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeRedirect
              NavigationTypeReload = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeReload
              NavigationTypeTyped = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeTyped
              ResourceType = None # (!) real value is "<class 'PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType'>"
              ResourceTypeCspReport = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeCspReport
              ResourceTypeFavicon = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeFavicon
              ResourceTypeFontResource = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeFontResource
              ResourceTypeImage = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeImage
              ResourceTypeLast = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeLast
              ResourceTypeMainFrame = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeMainFrame
              ResourceTypeMedia = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeMedia
              ResourceTypeNavigationPreloadMainFrame = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeNavigationPreloadMainFrame
              ResourceTypeNavigationPreloadSubFrame = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeNavigationPreloadSubFrame
              ResourceTypeObject = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeObject
              ResourceTypePing = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypePing
              ResourceTypePluginResource = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypePluginResource
              ResourceTypePrefetch = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypePrefetch
              ResourceTypeScript = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeScript
              ResourceTypeServiceWorker = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeServiceWorker
              ResourceTypeSharedWorker = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeSharedWorker
              ResourceTypeStylesheet = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeStylesheet
              ResourceTypeSubFrame = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeSubFrame
              ResourceTypeSubResource = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeSubResource
              ResourceTypeUnknown = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeUnknown
              ResourceTypeWorker = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeWorker
              ResourceTypeXhr = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeXhr
          
          jsulmJ 1 Reply Last reply
          0
          • K KHOSRO

            @jsulm yesss
            this condition satisfy and it is

            print(info.resourceType())
                    if info.resourceType() == QWebEngineUrlRequestInfo.ResourceTypeImage:
                        # Set custom cache control
                        info.setHttpHeader(b'Cache-Control', b'max-age=31536000')
            

            outpu is :
            PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeImage

            and the QWebEngineUrlRequestInfo class is :

            class QWebEngineUrlRequestInfo(__Shiboken.Object):
                # no doc
                def block(self, shouldBlock): # real signature unknown; restored from __doc__
                    """ block(self, shouldBlock: bool) -> None """
                    pass
            
                def changed(self): # real signature unknown; restored from __doc__
                    """ changed(self) -> bool """
                    return False
            
                def firstPartyUrl(self): # real signature unknown; restored from __doc__
                    """ firstPartyUrl(self) -> PySide2.QtCore.QUrl """
                    pass
            
                def initiator(self): # real signature unknown; restored from __doc__
                    """ initiator(self) -> PySide2.QtCore.QUrl """
                    pass
            
                def navigationType(self): # real signature unknown; restored from __doc__
                    """ navigationType(self) -> PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType """
                    pass
            
                def redirect(self, url): # real signature unknown; restored from __doc__
                    """ redirect(self, url: PySide2.QtCore.QUrl) -> None """
                    pass
            
                def requestMethod(self): # real signature unknown; restored from __doc__
                    """ requestMethod(self) -> PySide2.QtCore.QByteArray """
                    pass
            
                def requestUrl(self): # real signature unknown; restored from __doc__
                    """ requestUrl(self) -> PySide2.QtCore.QUrl """
                    pass
            
                def resourceType(self): # real signature unknown; restored from __doc__
                    """ resourceType(self) -> PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType """
                    pass
            
                def setHttpHeader(self, name, value): # real signature unknown; restored from __doc__
                    """ setHttpHeader(self, name: PySide2.QtCore.QByteArray, value: PySide2.QtCore.QByteArray) -> None """
                    pass
            
                def __init__(self, *args, **kwargs): # real signature unknown
                    pass
                @staticmethod # known case of __new__
                def __new__(*args, **kwargs): # real signature unknown
                    """ Create and return a new object.  See help(type) for accurate signature. """
                    pass
                NavigationType = None # (!) real value is "<class 'PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType'>"
                NavigationTypeBackForward = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeBackForward
                NavigationTypeFormSubmitted = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeFormSubmitted
                NavigationTypeLink = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeLink
                NavigationTypeOther = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeOther
                NavigationTypeRedirect = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeRedirect
                NavigationTypeReload = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeReload
                NavigationTypeTyped = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.NavigationType.NavigationTypeTyped
                ResourceType = None # (!) real value is "<class 'PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType'>"
                ResourceTypeCspReport = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeCspReport
                ResourceTypeFavicon = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeFavicon
                ResourceTypeFontResource = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeFontResource
                ResourceTypeImage = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeImage
                ResourceTypeLast = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeLast
                ResourceTypeMainFrame = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeMainFrame
                ResourceTypeMedia = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeMedia
                ResourceTypeNavigationPreloadMainFrame = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeNavigationPreloadMainFrame
                ResourceTypeNavigationPreloadSubFrame = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeNavigationPreloadSubFrame
                ResourceTypeObject = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeObject
                ResourceTypePing = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypePing
                ResourceTypePluginResource = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypePluginResource
                ResourceTypePrefetch = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypePrefetch
                ResourceTypeScript = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeScript
                ResourceTypeServiceWorker = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeServiceWorker
                ResourceTypeSharedWorker = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeSharedWorker
                ResourceTypeStylesheet = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeStylesheet
                ResourceTypeSubFrame = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeSubFrame
                ResourceTypeSubResource = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeSubResource
                ResourceTypeUnknown = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeUnknown
                ResourceTypeWorker = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeWorker
                ResourceTypeXhr = PySide2.QtWebEngineCore.QWebEngineUrlRequestInfo.ResourceType.ResourceTypeXhr
            
            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #6

            @KHOSRO Sorry, I don't really understand what you mean.
            Is setHttpHeader() called or not?

            And please format your code properly.

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            K 2 Replies Last reply
            0
            • jsulmJ jsulm

              @KHOSRO Sorry, I don't really understand what you mean.
              Is setHttpHeader() called or not?

              And please format your code properly.

              K Offline
              K Offline
              KHOSRO
              wrote on last edited by KHOSRO
              #7

              @jsulm i correct and edite above code
              please check another
              yes it call method

              1 Reply Last reply
              0
              • jsulmJ jsulm

                @KHOSRO Sorry, I don't really understand what you mean.
                Is setHttpHeader() called or not?

                And please format your code properly.

                K Offline
                K Offline
                KHOSRO
                wrote on last edited by
                #8

                @jsulm do u have any idea Sir

                jsulmJ 1 Reply Last reply
                0
                • K KHOSRO

                  @jsulm do u have any idea Sir

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #9

                  @KHOSRO In the code you posted you do not do anything inside setHttpHeader.

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  JonBJ K 2 Replies Last reply
                  0
                  • jsulmJ jsulm

                    @KHOSRO In the code you posted you do not do anything inside setHttpHeader.

                    JonBJ Offline
                    JonBJ Offline
                    JonB
                    wrote on last edited by JonB
                    #10

                    @jsulm
                    I don't know the answer to this, but what OP shows for QWebEngineUrlRequestInfo and setHttpHeader() etc. is not code he has written, it is Python/PySide's way of showing how QWebEngineUrlRequestInfo() is defined from Python point of view. You can assume it is actually calling the C++ QWebEngineUrlRequestInfo methods.

                    @KHOSRO
                    I don't understand what you are doing when you show

                    def setHttpHeader(self, name, PySide6_QtCore_QByteArray=None, bytes=None, *args, **kwargs): # real signature unknown; NOTE: unreliably restored from __doc__ 
                            """ setHttpHeader(self, name: Union[PySide6.QtCore.QByteArray, bytes], value: Union[PySide6.QtCore.QByteArray, bytes]) -> None """
                            print('Hiiiiiiiiiiiiiii')
                            pass
                    

                    Where have you made the edit to add your print()? You are not supposed to be redefining (def) setHttpHeader() you are supposed to be calling it with whatever you want. Like you show with

                    info.setHttpHeader(QByteArray(b'Cache-Control'), QByteArray(b'public,max-age=10000000'))
                    

                    QWebEngineUrlRequestInfo::setHttpHeader() is not virtual so you cannot override it (e.g. to add in your print()), you can only call it.

                    1 Reply Last reply
                    1
                    • jsulmJ jsulm

                      @KHOSRO In the code you posted you do not do anything inside setHttpHeader.

                      K Offline
                      K Offline
                      KHOSRO
                      wrote on last edited by KHOSRO
                      #11

                      @JonB thank u for ur response
                      do u have idead
                      why QWebEngineUrlRequestInfo and setHttpHeader() not work when called
                      and can not change the header
                      in detail:
                      i have a client which is qwebengine
                      i send request url to server when fetch it i want change cache- control for custom purpose
                      after changing url , i want to show downloaded url

                      1 Reply Last reply
                      0
                      • JonBJ Offline
                        JonBJ Offline
                        JonB
                        wrote on last edited by
                        #12

                        I don't know anything about it, but my guess is that it is changing the header, but you are not seeing the effect you expect/desire. What evidence do you have that it is not setting your header? After calling setHttpHeader() if you are Qt 6.5+ try calling QHash<QByteArray, QByteArray> QWebEngineUrlRequestInfo::httpHeaders() const to at least make sure your Cache-Control header is there. Or try sniffing/checking what is received at server side.

                        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