Qt QWebView类自定义User-Agent

9

有没有一种简单的方法来设置QWebView类正在使用的用户代理?

我找到的唯一相关链接是这个:

http://www.qtforum.org/article/27073/how-to-set-user-agent-in-qwebview.html

我现在正在学习C++/Qt,但是我不太理解那个网站上的解释。也许有人知道一个简单的方法来做到这一点?或者可以帮我理解那段代码吗?

2个回答

13

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标准允许什么。


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());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接