说短语“用户代理”或“用户代理字符串”无异于说脏话。开发人员过去常常使用用户代理来检测浏览器是否具有给定功能,而不是通过对象或属性检测来检查该功能是否实际存在。虽然那些日子已经过去了,但是网络的肮脏秘密之一是用户代理仍然有很多用途。例如,一种常见的用途是检测提供哪个移动主题;这种检测可以在客户端和服务器端进行。我最近发现了 Tobie Langel 的 ua-parser,这是一个很棒的存储库,它提供了简单的 JavaScript、PHP 和 Python 用户分析。
示例用户代理
'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'
JavaScript 用法
var uaParser = require('ua-parser'), uaParser.parse(navigator.userAgent); console.log(ua.tostring()); // -> "Safari 5.0.1" console.log(ua.toVersionString()); // -> "5.0.1" console.log(ua.family); // -> "Safari" console.log(ua.major); // -> 5 console.log(ua.minor); // -> 0 console.log(ua.patch); // -> 1
PHP 使用
// Require the library require("UAParser.php"); // Parse the UA $result = UA::parse(); // Get loads of information! :) print $result->full; // -> Chrome 16.0.912/Mac OS X 10.6.8 print $result->browserFull; // -> "Chrome 16.0.912" print $result->browser; // -> "Chrome" print $result->version; // -> "16.0.912" print $result->major; // -> 16 (minor, build, & revision also available) print $result->osFull; // -> "Mac OS X 10.6.8" print $result->os; // -> "Mac OS X" print $result->osVersion; // -> "10.6.8" print $result->osMajor; // -> 10 (osMinor, osBuild, & osRevision also available)
Python 用法
# Import the lib from ua_parser import user_agent_parser # Parse the user agent user_agent_parser.Parse(request.META.get('HTTP_USER_AGENT')) print result_dict['user_agent'] # {'major': '5', 'minor': '1', 'family': 'Mobile Safari', 'patch': None} print result_dict['os'] # {'major': '5', 'patch_minor': None, 'minor': '1', 'family': 'iOS', 'patch': None} print result_dict['device'] # {'is_spider': False, 'is_mobile': True, 'family': 'iPhone'}
上面的代码示例对于会使用它们的人来说都是很容易识别的;使用用户代理信息很简单,API 也很简单。 Tobie 为这个漂亮的图书馆干得好。