与 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 请求一起发送自定义标头的主要内容,如果未能解决你的问题,请参考以下文章
发送带有自定义 HTTP 标头的跨域请求时禁用预检 OPTION 请求