2010-10-11 6 views
8

Có cách nào dễ dàng để thiết lập User-Agent lớp QWebView đang sử dụng không?Qt QWebView lớp tùy chỉnh User-Agent

duy nhất liên kết có liên quan tôi thấy tìm kiếm là này

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

tôi đang học C++/Qt ngay bây giờ và tôi không thực sự understant những gì đang giải thích trên trang web đó. Có lẽ ai đó biết một cách dễ dàng để làm điều đó? Hoặc có thể giúp tôi hiểu mã đó?

Trả lời

12

Qt cho phép bạn cung cấp tác nhân người dùng dựa trên URL thay vì một tác nhân người dùng duy nhất cho dù URL là gì. Ý tưởng này sau đó là để trả lại user agent bất cứ lúc nào một trang web mới được tạo ra:

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

Để sử dụng trang thay vì trang tiêu chuẩn mà được tạo ra, bạn có thể thiết lập rằng trang trên đối tượng điều khiển trình duyệt trước đưa ra yêu cầu:

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

Tôi thực sự mong đợi một nhà máy có mặt ở nơi nào đó đảm bảo rằng trang web được tạo luôn là một loại nhất định, nhưng tôi không thấy.

Tuy nhiên, tùy chọn khác nên để thiết lập các tiêu đề user agent trong QNetworkRequest:

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

Bạn thực sự muốn kiểm tra xem nó toAscii() hoặc toUtf8() hoặc một trong những biến thể khác như tôi không chắc chắn chính xác những gì tiêu chuẩn HTTP cho phép.

+0

Cảm ơn Kaleb! Đó là những gì tôi đang tìm kiếm. –

2

đơn giản,

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