Qt QWebView类自定义User-Agent
Posted
技术标签:
【中文标题】Qt QWebView类自定义User-Agent【英文标题】:Qt QWebView class custom User-Agent 【发布时间】:2010-10-11 14:07:58 【问题描述】:有没有一种简单的方法来设置 QWebView 类正在使用的用户代理?
我发现搜索的唯一相关链接是这个
http://www.qtforum.org/article/27073/how-to-set-user-agent-in-qwebview.html
我现在正在学习 C++/Qt,但我真的不明白那个网站上的解释。也许有人知道一个简单的方法来做到这一点?或者可以帮助我理解该代码吗?
【问题讨论】:
【参考方案1】:Qt 允许您提供基于 URL 的用户代理,而不是单个用户代理,无论 URL 是什么。然后的想法是在创建新网页时返回用户代理:
class UserAgentWebPage : public QWebPage
QString userAgentForUrl(const QUrl &url ) const
return QString("My User Agent");
;
为了使用该页面而不是创建的标准页面,您可以在发出请求之前在浏览器控件对象上设置该页面:
yourWebView->setPage(new UserAgentWebPage(parent));
我实际上希望在某个地方存在一个工厂,以保证创建的网页始终属于某种类型,但我没有看到。
另一个选项应该是在QNetworkRequest 中设置用户代理标头:
QNetworkRequest request = new QNetworkRequest();
request->setRawHeader(
QString("User-Agent").toAscii(),
QString("Your User Agent").toAscii()
);
// ... set the URL, etc.
yourWebView->load(request);
您实际上想检查它是 toAscii()
还是 toUtf8()
或其他变体之一,因为我不确定 HTTP 标准到底允许什么。
【讨论】:
谢谢卡莱布!这就是我一直在寻找的。span> 【参考方案2】:简单地说,
class myWebPage : public QWebPage
virtual QString userAgentForUrl(const QUrl& url) const
return "your user agent";
;
//Attention here is new myWebPage() not new myWebPage(parent)
UI->webView->setPage(new myWebPage());
【讨论】:
以上是关于Qt QWebView类自定义User-Agent的主要内容,如果未能解决你的问题,请参考以下文章
QT 从 QWebView 的 QNetworkAccessManager 读取数据
Qt:QWebview 不在另一台机器上显示 jpg、gif、png 图像