首次听到user-agent的概念,及时来恶补一下~
关联篇 - 网络请求
如使用场景在WebView内,即可关注下
那些关于WebView的回忆 ~ 整合了入门使用、监听加载状态、优化加载样式、多场景后退键处理、双端交互流程、交互常见问题、header、user-agent传值、API概述等
Baby当你老了,我们都在干嘛呢?
基础认知
User-Agent
简称 UA
,中文名为用户代理
,是Http请求协议中请求头的一部分,包括GET请求和POST请求
作用场景
-
在手机端/pc端,可以通过user-agent来判断不同的设备,从而可以显示不同的排版,进而给用户提供更好的体验
例如:用手机访问百度和pc端访问的页面排版是不一样的,这些就是百度根据访问者的UA来判断的 -
通过user-agent,进行信息统计,主要是用于渠道统计
例如:在之前的工作中碰到过类似情况,在app中接入广告的sdk,当用户点击广告图片时就需要通过webview进行详细广告页面的跳转,这时候就需要在webview中进行UA的自定义设置了,这样后台广告平台的人员就可以通过UA判断是哪个客户端(安卓/苹果),哪个浏览器的客户,进而进行客户端的统计
常规 网络请求
一般移动端的网络请求,在头部都默认添加了user-agent
,如果我们要在网络请求中修改 user-agent
参数,那么就需要在自我封装的网络框架基层内重写 user-agent
!
下面我们以 okhttp
、Retrofit
为例 ~
okhttp初始化
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.removeHeader("User-Agent")//移除旧的
//WebSettings.getDefaultUserAgent(mContext) 是获取原来的User-Agent
.addHeader("User-Agent",“上面得到的User-Agent” )
.build();
return chain.proceed(request);
}
})
.connectTimeout(2, TimeUnit.MINUTES)
.writeTimeout(2, TimeUnit.MINUTES)
.readTimeout(2, TimeUnit.MINUTES)
.build();
Retrofit初始化
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.removeHeader("User-Agent")//移除旧的
.addHeader("User-Agent", WebSettings.getDefaultUserAgent(mContext))
.build();
return chain.proceed(request);
}
})
.connectTimeout(2, TimeUnit.MINUTES)
.writeTimeout(2, TimeUnit.MINUTES)
.readTimeout(2, TimeUnit.MINUTES)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("/BaseUrl")
.client(okHttpClient)//采用okhttpclient
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
WebView 网络请求
user-agent 获取、设置
webView
获取 user-agent
WebView webView = findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
String userAgentString = webSettings.getUserAgentString();
LogUtil.e("userAgentString=",userAgentString);
重设 user-agent
- 场景1. 尾部添加字段
webSettings.setUserAgentString(userAgentString + "自定义内容");
- 场景2. 替换原来的user-agent (可选自己喜欢的方式)
//replace替换方式
webSettingssetUserAgentString(userAgentString.replace("Android","HFWSH_USER Android"));
//覆盖重设方式
webSettings.setUserAgentString("自定义内容");
user-agent 数据分析
user-agent
完整数据
Mozilla/5.0 (Linux; Android 8.1.0; PACM00 Build/O11019; wv) AppleWebKit/537.36
(KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36
user-agent
→ 四个分段 → 参数介绍
1)Mozilla/5.0 :表示兼容Mozilla, 几乎所有的浏览器都有这个字符;
2) (Linux; Android 8.1.0; PACM00 Build/O11019; wv): 表示设备的操作系统版本,以及CPU信息;
3)AppleWebKit/537.36 (KHTML, like Gecko):表示浏览器的内核;
4) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36: 表示浏览器的版本号。
借鉴之所