PyQt WebEngine 设置 http 标头

Posted

技术标签:

【中文标题】PyQt WebEngine 设置 http 标头【英文标题】:PyQt WebEngine set http headers 【发布时间】:2017-03-22 03:37:15 【问题描述】:

我想将我的应用从 Qt WebKit 移植到 Qt WebEngine。在 Qt Webkit 中,我可以使用 QNetworkRequest 设置 http 标头,但在 Qt WebEngine 中,文档说:

Qt WebEngine 有自己的 HTTP 实现,不能通过 QNetworkAccessManager

我使用 PyQt5 和 Qt5.8。

我找不到如何在 Qt WebEngine 中设置 http 标头。

-------------更新----

终于成功了!谢谢! @Trilarion:

定义我的 QWebEngineUrlRequestInterceptor 类

class NWUrlRequestInterceptor(QWebEngineUrlRequestInterceptor):
    def __init__(self, headers):
        super(QWebEngineUrlRequestInterceptor, self).__init__()
        self.headers = headers

    def set_headers(self,headers):
        self.headers = headers

    def interceptRequest(self, info):
        print info, self.headers
        for header, value in self.headers:
            info.setHttpHeader(header, value);

在我的浏览器中使用:

self.request_interceptor = NWUrlRequestInterceptor(self.headers)
self.webpage.profile().setRequestInterceptor(self.request_interceptor)

【问题讨论】:

【参考方案1】:

你应该实现一个QWebEngineUrlRequestInterceptor,在它的interceptRequest方法中你会得到一个QWebEngineUrlRequestInfo,它可以通过setHttpHeader设置一个http头。

通过QWebEngineView.page().profile().setRequestInterceptor设置请求拦截器。

灵感来自How to send HTTPHeader using QT WebEngine?。

【讨论】:

以上是关于PyQt WebEngine 设置 http 标头的主要内容,如果未能解决你的问题,请参考以下文章

如何为PyQt5构建Qt WebEngine?

Qt WebEngine设置socks5代理

如何使用 QT WebEngine 发送 HTTPHeader?

使用 webengine 视频和音频编解码器

如何在 RequestInterceptor 中正确设置 QWebEngine HTTP 标头

使用 Qt WebEngine 自动授予对麦克风和摄像头的访问权限