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?
-
@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'
-
Then that means that
if info.resourceType() == QWebEngineUrlRequestInfo.ResourceTypeImage
is 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
I don't know the answer to this, but what OP shows forQWebEngineUrlRequestInfo
andsetHttpHeader()
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++QWebEngineUrlRequestInfo
methods.@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') 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 withinfo.setHttpHeader(QByteArray(b'Cache-Control'), QByteArray(b'public,max-age=10000000'))
QWebEngineUrlRequestInfo::setHttpHeader()
is notvirtual
so 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-Control
header is there. Or try sniffing/checking what is received at server side.