2010-10-11 11 views

risposta

12

Qt consente di fornire un agente utente basato sull'URL anziché su un singolo agente utente indipendentemente dall'URL. L'idea quindi è di restituire l'agente utente in qualsiasi momento si crea una nuova pagina web:

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

Per poter utilizzare quella pagina anziché la pagina standard che viene creato, è possibile impostare la pagina per l'oggetto di controllo browser prima effettua la richiesta:

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

vorrei davvero si aspettano una fabbrica di essere presente da qualche parte che garantisce che la pagina web creata è sempre di un certo tipo, ma non ho visto uno.

Ancora un'altra opzione dovrebbe essere quello di impostare l'intestazione agente utente all'interno della QNetworkRequest:

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

si sarebbe effettivamente desidera controllare se è toAscii() o toUtf8() o una delle altre varianti come io non sono esattamente sicuro ciò che lo standard HTTP consente.

+0

Grazie Kaleb! Questo è quello che stavo cercando. –

2

semplicemente,

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