UA= User Agent
用浏览器浏览网页时,浏览器会发送User Agent到网站服务器,
服务器可以根据User Agent识别用户的操作系统及版本,浏览器及版本.
然后判断用户浏览器可以支持的功能,从而返回给浏览器不同的代码,
但这种差异一般会很小,甚至没有,所以我们很难会觉察到它的存在
很多视频网站比如优酷都有对ipad进行优化,可以选择观看高清版视频,而iphone版就不行,能否在浏览器中加入ipad的ua让这些视频网站将设备识别为ipad跳转到ipad版以便能观看高清视频呢?
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的
操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些
页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。
通过UA,可以知道用户的手机类型,是moto的,还是三星的。是moto哪一款的,都可以明白。
通过UA,可以查看手机类型是什么的。 根据UA,可以向用户提供适合于他的机器的相关服务,如大
小合适的图片,格式准确的铃声等。
UA字串
标准格式为:浏览器标识 (操作系统标识; 加密等级标识;操作系统或CPU;浏览器语言) 渲染引擎标
识;版本信息
浏览器标识
手机浏览器的标识是针对移动运营商的一个标 志。 某些地区会禁止某些标识的浏览器连接网络,
因 此造成浏览器无法联网。 当你的手机浏览器出现无法连接某些网站或者无 法联网的情况时,可以尝
试修改浏览器标识
加密等级标识
N: 表示无安全加密
I: 表示弱安全加密
U: 表示强安全加密
浏览器语言
设置 >语言和键盘设置>手机中指定的语言
操作系统标识
FreeBSD 类unix 操作系统
Mac 苹果电脑的操作系统Mac OS系统
Solaris Sun Microsystems研发的计算机操作系统
Linux
Windows
渲染引擎
渲染引擎,其实就是网页浏览器的排版引擎,也被称为样版引擎。
它负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的
显示方式,然后会输出至显示器或打印机。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示
网络内容的应用程序都需要渲染引擎
浏览器使用 AppleWebKit 渲染引擎,格式为:AppleWebKit /版本号
版本信息
显示浏览器真实版本信息,格式为: Version/版本号
Mozilla/5.0 (Linux; U;Android 2.3.5;zh-cn;P331Build/GRJ22) AppleWebKit/533.1 (KHTML,
like Gecko) Version/4.0 Mobile Safari/533.1
1)Android版本:这是浏览器拼接UA之时,取的系统(Build.VERSION.RELEASE)字串,位于标准UA中
用红色标识的2.3.5处,可以通过 设置 --》关于手机--》Android版本 进行查看,也就是浏览器的
Android版本字段和系统的Build.VERSION.RELEASE 字串保持一致,如果提需求、故障请提交相应维护同事,
不过一般该处使用系统默认不会有问题;
2)语言和国家:这是系统当前使用语言和国家,位于标准UA中用绿色标识的zh-cn处。前者是语言名,
后者是国家名,这点系统默认一般是正确的,和需求不同往往是因为你现在所使用语言及其国家不同而造
成的,不应该算是故障,这点要注意;
3)外部型号:这部分字串每个项目都会更改且是来回沟通需求成本最高的地方。这部分浏览器取的系
统(Build.MODEL)字串,位于标准UA中用蓝色标识的P331处,可以通过 设置 --》关于手机--》型号
进行查看,也就是浏览器的外部型号和系统的Build.MODEL 字串保持一致;
4)版本号:这部分字串一般是带的系统字串,复现的概率一般,浏览器取的系统(Build.ID)字串,
是由该项目SCM同事负责维护的,位于标准UA中用紫红标识的GRJ22处,也就是浏览器的版本号和系统的
Build.ID字串保持一致,如果提需求和故障请直接提交到该项目SCM处;
5)其余:浏览器负责,一般是固定的。
电信项目中浏览器的UA绝大部分字串是由浏览器来写死的,有一处例外,以一个电信项目中浏览器UA需求为例。
电信项目中浏览器的UA:
Mozilla/5.0 (Linux;U;Android 2.2.2;zh-cn;ZTE-C_N880S Build/FRF91) AppleWebkit/531.1
(KHTML, like Gecko) Version/4.0 Mobile Safari/531.1
除了红色区域,别的都是浏览器负责合入。红色ZTE-C_N880S Build/FRF91,是浏览器取系统字串Build.DISPLAY,
也就是浏览器的该字串和系统的Build. DISPLAY 字串保持一致,如果提需求和故障请直接提交到相应负责该字串维护同事处。
浏览器UA的抓取
1.手机设置了正确的APN,能够正常上网。
2.打开USB调试,输入*983*87274#打开手机端口(All functions),另外*983*564738#修改读取权
限sy_rw->OK 要多试几次才能成功。
3.手机连接电脑,确保端口被识别,按窗口键+R,运行cmd.
4.输入adb shell 按回车,获取root权限。获取权限成功时会出现#号,如果未出现就证明没有获取
root权限。
5.运行pushtd.bat,然后再运行tcpdump日志,最后运行普通日志导出***.dat文件。
6.手机上网 一段时间后ctrl+c退出adb shell.
7.运行普通日志的批处理文件,然后导出来。
8.导出的日志中会出现***.dat的文件,这就证明已经成功抓取了手机UA和Uaprofile.
注意:日志的保存路径是和普通日志同一路径下。
1.Android自带浏览器的UAProfile实现
1) UI设置
在Android浏览器的地址栏内输入“about:debug”,并进入,这时不会有新的网页显示,但这却使浏
览器进入了debug模式。
在Menu菜单中选择“More”,在弹出的菜单中选择“Settings”,在弹出的页面上你会发现多了一些
“debug”相关项,最后一项即为“UAString”,点击,弹出当前的已有的配置项
2)代码实现:
strings.xml: \packages\apps\Browser\res\values\strings.xml
其中有如下一段:
<!-- Do not tranlsate. Development option -->
<string-array name="pref_development_ua_choices" translatable="false">
<item>Android</item>
<item>Desktop</item>
<item>iPhone</item>
</string-array>
<!-- Do not tranlsate. Development option -->
<string-array name="pref_development_ua_values" translatable="false">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
pref_development_ua_choices:对应的是UserAgent时选项的名字
pref_development_ua_values:对应的是不同的UserAgent,
BrowserSettings.java:\packages\apps\Browser\src\com\android\browser\BrowserSettings.java
其中有如下代码:
private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (Macintosh; " +
"U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, " +
"like Gecko) Version/4.0 Safari/530.17";
private static final String IPHONE_USERAGENT = "Mozilla/5.0 (iPhone; U; " +
"CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 " +
"(KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16";
public void update(Observable o, Object arg) {
BrowserSettings b = (BrowserSettings)o;
WebSettings s = mSettings;
s.setLayoutAlgorithm(b.layoutAlgorithm);
if (b.userAgent == 0) {
// use the default ua string
s.setUserAgentString(null);
} else if (b.userAgent == 1) {
s.setUserAgentString(DESKTOP_USERAGENT);
} else if (b.userAgent == 2) {
s.setUserAgentString(IPHONE_USERAGENT);
}
由此我们可以看出第一段Java代码是不同的UserAgent字符串,从第二段代码中我们可以看出strings.xml中那个整
数的数组和不同UserAgent的对应关系,0对应默认的UserAgent,即Android Chrome Lite自己的UserAgent,1对应
的是Mac OS的UserAgent,2对应的是IPhone OS的UserAgent。
2. 设置自己的UAProfile
1) 在strings.xml中添加一个UserAgent选项的名字,然后添加一个序号
2) 在BrowserSettings.java中读取自己的UserAgent字符串,然后再加一个if:
else if (b.userAgent == 3) {
s.setUserAgentString(YOUR_OWN_USERAGENT);
UAProf 的全称是User Agent Profile,就是 用户代理描述,主要用于描述终端设备的性能和优先选
择信息,主要是为了让其他设备(比如WAP网关)能够自动识别终端的能力,从而可以优化传递给终端的
内容格式。UAProf通常描述了终端的硬件平台、软件平台、与此设备相连的网络环境特性等信息。
User Agent profile 满足这一规格的终端机要在HTTP1.1协议报头的User Agent Field领域提供以下
的终端机信息。 - 终端机的硬件信息:制造厂商、类型、屏幕大小(像素、文字) 等。 软件信息:应用
软件管理版本、SK-VM版本、MIN等。 - 无线因特网服务供应商信息:SKT、KTF、LGT、 STI、 HSP等。
在HTTP协议里面是没有UA Profiler字段的,由于HTTP协议在手持终端上实践和PC上差别巨大,所以在
手持终端上引入了这个字段,属于扩展字段;
通过UA Profiler,我们可以看出浏览器加载页面的快慢,例如下载脚本有没有被阻断,最高可打开多
少个链接,是否支持“Date:”路径。
UAProf常见于运营商定制终端。运营商对这些UAProf进行集中管理。运营商根据它对终端设备的软硬
件特性进行判断,当向终端设备推送自己的增值业务时,会跟据这些特性来推送适合终端设备的内容。比
如可以判断出终端设备是支持MP4还是RM格式视频。根据支持不同的视频格式,推送不同的视频内容。
UA错误时会造成什么样的情况
一般UA错误后会造成手机与网络传输数据出现异常,比方说下载的图片不适应手机屏幕,或者造成无
法下载游戏,软件,联网时提示页面错误。
User-Agent是浏览器请求头中带有的一个头信息,包含了http请求发起者的信息。http协议在请求头中包含这个域的主要目的是为了统计数据,同时可以达到追踪是否有违背协议的情况出现以及根据特定的用户适配特定的页面的需求。浏览器领域的纷争给了UA更多的发展,目前http://www.user-agents.org/列出的ua已经多达上百条。我们目前最常用的就是各种终端设备(尤其是手机)浏览器提交请求时设置的UA,比如苹果iphone手机的UA可能在访问时就是“IUC(U;iOS 5.0.1;Zh-cn;320*480;)/UCWEB8.1.4.125/42/997”,这个比较文艺,看样子像是iphone用UC的;一个纯粹的果粉可能是“Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8C148”,而android的可能就是“|Mozilla/5.0 (Linux; U; Android 2.2.2; zh-cn; ZTE-U V880 Build/FRF91) UC AppleWebKit/530+ (KHTML, like Gecko) Mobile Safari/530”,symbian可能是“MQQBrowser/2.8 (E71-1;SymbianOS/9.1 Series60/3.0)”。我们可以根据UA统计各种设备的访问量,达到统计的目的,同时,如果不做UA伪装的话,也可以找到各种spider和crwaler。
如何去读一个UA呢?根据RFC2616的描述要求,一个ua字段是这样的形式User-Agent = "User-Agent" ":" 1*( product | comment ),方便起见,一般所product描述是依照其重要性来排序的,先出现的相对重要一点。product的形式就是名字和版本号,中间用‘/’隔开。就wikipedia上的说法,大多数的浏览器目前使用的UA格式如下:Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]。并在文中举例:Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405
其中
- Mozilla/5.0: Previously used to indicate compatibility with the Mozilla rendering engine (与Mozilla渲染引擎兼容)
- (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us): Details of the system in which the browser is running (浏览器运行的系统信息)
- AppleWebKit/531.21.10: The platform the browser uses (浏览器的平台?我觉得应该说是浏览器引擎,具体说是布局引擎)
- (KHTML, like Gecko): Browser platform details (浏览器引擎信息)
- Mobile/7B405: This is used by the browser to indicate specific enhancements that are available directly in the browser or through third parties. An example of this is Microsoft Live Meeting which registers an extension so that the Live Meeting service knows if the software is already installed, which means it can provide a streamlined experience to joining meetings
其中各种引擎说明,可以参看这篇文章。
你可以通过这里来测试你的浏览器的UA,当然如果自己写爬虫的话,也记得做好UA的伪装工作。如果要做一个PC站点配套的wap站点,如果能力足够且时间充裕的话,完全可以重写页面,用HTML5或者是普通XHTML来进行。写好以后,条件好的单独部署单独维护,条件差的,可以统一部署,由应用服务器端(apache有开源的模块)根据UA来进行判断需要显示的页面代码,或者交由框架判断也可以(写过滤器对request进行首回合判断)。
转自:http://blog.csdn.net/lizzy115/article/details/7851972