2010-10-11 17 views
8

¿Hay una manera fácil de configurar el User-Agent que está utilizando la clase QWebView?Qt QWebView clase personalizada usuario-agente

El único vínculo relevante que encontré fue a buscar este

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

estoy aprendiendo C++/Qt en este momento y realmente no me understant lo que se explicó en ese sitio web. Tal vez alguien sabe una manera fácil de hacerlo? ¿O puede ayudarme a entender ese código?

Respuesta

12

Qt le permite proporcionar un agente de usuario basado en la URL en lugar de un único agente de usuario sin importar la URL. La idea entonces es devolver el agente de usuario cada vez que se crea una nueva página web:

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

Con el fin de utilizar esa página en lugar de la página estándar que se crea, se puede establecer la página en el objeto de control del navegador antes que realiza la solicitud:

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

de hecho, me espera una fábrica de estar presente en alguna parte que se garantiza que la página web creada es siempre de un cierto tipo, pero no ver uno.

Sin embargo, otra opción debe ser la de establecer el encabezado de agente de usuario dentro de la QNetworkRequest:

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

usted realmente quiere comprobar si se trata de toAscii() o toUtf8() o una de las otras variantes ya que no estoy seguro exactamente lo que el estándar HTTP permite

+0

Gracias Kaleb! Eso es lo que estaba buscando. –

2

simplemente,

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