2010-10-11 10 views
8

Gibt es eine einfache Möglichkeit, den User-Agent einzurichten, den die QWebView-Klasse verwendet?Qt QWebView Klasse benutzerdefinierter User-Agent

Die einzige relevante Link Ich war dieses C ich lerne

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

jetzt ++/Qt gefunden entsprechend und ich understant nicht wirklich, was auf dieser Website erklärt wird. Vielleicht weiß jemand einen einfachen Weg, es zu tun? Oder kann mir helfen, diesen Code zu verstehen?

Antwort

12

Mit Qt können Sie einen Benutzeragenten basierend auf der URL anstelle eines einzelnen Benutzeragenten bereitstellen, unabhängig von der URL. Die Idee, dann ist der User-Agent jederzeit eine neue Webseite zurückkehren erstellt:

class UserAgentWebPage : public QWebPage { 
    QString userAgentForUrl(const QUrl &url) const { 
     return QString("My User Agent"); 
    } 
}; 

Um diese Seite anstelle der Standard-Seite zu verwenden, die erstellt wird, können Sie die Seite im Browser Steuerobjekt festlegen können vor der die Anfrage:

yourWebView->setPage(new UserAgentWebPage(parent)); 

ich tatsächlich eine Fabrik erwarten würde vorhanden irgendwo sein, die garantieren, dass die Webseite immer eines bestimmten Typs erstellt ist, aber ich sah man nicht.

Dennoch sollte eine weitere Option sein, die User-Agenten-Header innerhalb der QNetworkRequest einzustellen:

QNetworkRequest request = new QNetworkRequest(); 
request->setRawHeader(
    QString("User-Agent").toAscii(), 
    QString("Your User Agent").toAscii() 
    ); 
// ... set the URL, etc. 
yourWebView->load(request); 

Sie würden wollen, tatsächlich prüfen, ob es toAscii() oder toUtf8() oder eine der anderen Varianten ist, wie ich bin nicht sicher, genau was der HTTP-Standard erlaubt.

+0

Dank Kaleb! Das habe ich gesucht. –

2

einfach,

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