与 qtwebkit 请求一起发送自定义标头

Posted

技术标签:

【中文标题】与 qtwebkit 请求一起发送自定义标头【英文标题】:Sending a custom header along with qtwebkit request 【发布时间】:2010-09-07 22:28:05 【问题描述】:

我正在使用 PyQt4 和 QtWebKit 做一些工作,并且在网页请求中需要发送自定义“主机”标头以及标准 HTTP 请求。我没有看到任何向请求添加自定义标头的选项,但这对我来说是全新的,所以我希望我遗漏了一些东西。我在看这里:

http://doc.qt.digia.com/4.6/qwebsettings.html

任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

您可以在发送的QNetworkRequest 上设置标头:

QNetworkRequest request;
request.setUrl(QUrl("http://qt.nokia.com"));
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");

要在加载页面时使用该自定义请求,请使用重载的 load 函数:

myWebView->load(request);

【讨论】:

这会覆盖所有默认标题,还是只是添加和替换现有标题? 知道为什么当我使用“主机:mysite.com”时它会挂起,但在我使用“主机:www.mysite.com”时工作正常吗?我希望网络服务器在任何一种情况下都会做出响应,但在第一种情况下,呼叫只是无限期地坐在那里。 该行为取决于所使用的 Web 服务器。当服务器支持多个(虚拟)主机时,它必须使用host 标头来确定应将请求发送到哪个虚拟主机。 我正在使用允许特定用户代理允许的网络应用程序,而我的 code 和用户代理没有显示任何效果..【参考方案2】:

如果您想将此应用于 QtWebKit 发出的所有请求,您可以继承 QNetworkAccessManager 并重新实现其 createRequest() 函数以相应地修改标头。

【讨论】:

如果 createRequest() 通过 const 引用接受 QNetworkRequest,您能告诉我如何实现吗?我可以想象应该调用相应 QNetworkRequest 的 setHeader() 或 setRawHeader()。

以上是关于与 qtwebkit 请求一起发送自定义标头的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ruby 发送自定义 HTTP 标头

使用 CURL 发送自定义标头

发送带有自定义 HTTP 标头的跨域请求时禁用预检 OPTION 请求

使用flash发送带有自定义标头的POST请求

Firefox 和 Safari 不在 Service Worker 请求中发送自定义 http 标头

Axios 未在请求中发送自定义标头(可能是 CORS 问题)