2010-10-11 83 views

回答

12

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标准允许的内容。

+0

感谢卡莱布!这就是我一直在寻找的。 – 2010-10-11 20:08:25

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