setHttpHeader not wok in QWebEngineUrlRequestInfo
-
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_()@KHOSRO said in setHttpHeader not wok in QWebEngineUrlRequestInfo:
but setHttpHeader not work
So, is info.setHttpHeader called?
-
@KHOSRO said in setHttpHeader not wok in QWebEngineUrlRequestInfo:
but setHttpHeader not work
So, is info.setHttpHeader called?
@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') passit can not print 'Hiiiiiii' -
Then that means that
if info.resourceType() == QWebEngineUrlRequestInfo.ResourceTypeImageis never true.
-
Then that means that
if info.resourceType() == QWebEngineUrlRequestInfo.ResourceTypeImageis never true.
@jsulm yesss
this condition satisfy and it isprint(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.ResourceTypeImageand 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 -
@jsulm yesss
this condition satisfy and it isprint(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.ResourceTypeImageand 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 -
@KHOSRO Sorry, I don't really understand what you mean.
Is setHttpHeader() called or not?And please format your code properly.
-
@KHOSRO Sorry, I don't really understand what you mean.
Is setHttpHeader() called or not?And please format your code properly.
-
@jsulm
I don't know the answer to this, but what OP shows forQWebEngineUrlRequestInfoandsetHttpHeader()etc. is not code he has written, it is Python/PySide's way of showing howQWebEngineUrlRequestInfo()is defined from Python point of view. You can assume it is actually calling the C++QWebEngineUrlRequestInfomethods.@KHOSRO
I don't understand what you are doing when you showdef 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') passWhere 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 withinfo.setHttpHeader(QByteArray(b'Cache-Control'), QByteArray(b'public,max-age=10000000'))QWebEngineUrlRequestInfo::setHttpHeader()is notvirtualso you cannot override it (e.g. to add in yourprint()), you can only call it. -
@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 -
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 yourCache-Controlheader is there. Or try sniffing/checking what is received at server side.