StupidBeauty
Read times:911Posted at:Thu Nov 15 22:38:35 2012
- no title specified

Qt维基翻译:在Qt程序中设置浏览器标识字符串,Set User-Agent Header in a Qt Application

HTTP 的浏览器标识字符串 [w3.org] 用来 在 HTTP通信会话中 向服务器标识客户端自身。无论 Qt程序是通过QNetworkRequest 编程接口来直接使用HTTP,还是通过WebKit 来间接使用HTTP,都应当定义自己私有的浏览器标识字符串, 这将会在Qt 框架与 HTTP 服务器进行底层通信时用到。

如果程序不设置适当的浏览器标识字符串的话,服务器 就无法正确地识别客户端程序。 这也可能给移动设备 上的程序带来麻烦,因为运营商 的网关可能根本不会将这个程序的网络请求放行到互联网上。

要将妳的浏览器标识符设置成符合妳的程序名字和版本号的。另外 将设备的名字也通过括号包含进来,以让服务器正确识别客户端程序的运行环境,例如 “Nokia”。如果 不提供这个信息, 妳的程序的网络请求可能不会被运营商放行。必要 的话还可以加上更多的信息。

举例:
User-Agent: MyAppName/1.0 (Nokia)

当妳是使用Qt 网络编程接口来访问网络时, 就在QNetworkRequest 对象里设置浏览器标识字符串:

  1. 1. QNetworkRequest request;

  2. 2.request.setUrl(QUrl("http://qt.nokia.com"));

  3. 3.request.setRawHeader("User-Agent", "MyAppName/1.0 (Nokia; Qt)");

以上的代码让那些处于底层的网络相关的类在进行 HTTP 网络操作时使用指定的浏览器标识字符串。 这不会影响到QWebKit。QWebKit有它自己的默认浏览器标识字符串,那是在QWebPage::userAgentForUrl 方法的文档里说明的。 (在Symbian 设备上运行时)一般是这种形式的:

Mozilla/5.0 (Symbian; U; N8-00; fi-FI) AppleWebKit/534.3 (KHTML, like Gecko) Qt/4.7.4 Mobile Safari/534.3

要想在 QtWebKit [doc.qt.nokia.com] 中配置使用完全自定义的浏览器标识字符串的话,妳需要子类化QWebPage。 在子类中实现 QWebPage::userAgentForUrl [doc.qt.nokia.com] 函数,在那个函数中定义妳想要的浏览器标识字符串。最后 ,妳需要用 setPage [doc.qt.nokia.com] 函数来将这个QWebPage 子类设置给 QWebView

不过,如果程序 只需要 在 QtWebKit 的浏览器标识字符串中用 一对指定的产品名/版本号字符串替换 掉默认值的话,那么 只需要替换掉默认 的 Qt/版本号部分就行了。 只需 向QApplication 对象设置一下程序名字和版本号就行了:

  1. 1. QApplication app(argc, argv);

  2. 2.app.setApplicationName(QString("MyOwnBrowserApp"));

  3. 3.app.setApplicationVersion(QString("1.0"));

  4. 4.//或者,如果妳希望移动运营商 将妳的程序的网络请求放行的话,这样 :app.setApplicationVersion(QString("1.0 (Nokia; Qt)"))

以上代码将在QtWebkit 中产生这样一个浏览器标识字符串:
Mozilla/5.0 (Symbian; U; N8-00; fi-FI) AppleWebKit/534.3 (KHTML, like Gecko) MyOwnBrowserApp/1.0 Mobile Safari/534.3

目前情况下(Qt 4.7),后一种方法是唯一一种在 QML 的WebView 中简单地配置浏览器标识字符串的方法。

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4