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的主要内容,如果未能解决你的问题,请参考以下文章

QWebView 不加载外部资源

JWPlayer 在 Qt5 QWebView 中不可见

QT 从 QWebView 的 QNetworkAccessManager 读取数据

Qt:QWebview 不在另一台机器上显示 jpg、gif、png 图像

在 Qt 中,QWebView 和 QNetworkRequest 不能共享 cookie

Qt 5.3 使用原来的QT4.8.4项目时QWebView QWebFrame