博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Okhttp去除请求头user-agent
阅读量:6417 次
发布时间:2019-06-23

本文共 3078 字,大约阅读时间需要 10 分钟。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qingfeng812/article/details/78741663

现象说明

用OKhttp框架请求http请求的时候会把user-agent带上;然而有些时候我们需要把请求头里面的user-agent去掉;

客户端程序:

private static final String BASE_URL = "http://192.168.253.200:8080/Chapter/";    public static void testHeaders() {    HttpClient httpClient = new HttpClient.Builder(BASE_URL).isDebug(false)            .add("header", "12345")            .header("master", "china")            .connectTimeout(5000)            .readTimeout(5000)            .build();    httpClient.Api().send(new HttpClient.Builder().url("postParam")            .add("header", "123459")            .add("master", "usa")            .add("token", "388298a0c89f4a38b2fed4cd4123d441")            .method(Method.POST)            .build(), new ResultSubscriber<>(new ResultListener() {                @Override                public void onResponse(Object t) {                    System.out.println(t);                }            }));}

返回结果:

{"headers":{    "content-length":"76",    "host":"192.168.253.200:8080",    "client":"Android Client",    "content-type":"application/x-www-form-urlencoded",    "connection":"Keep-Alive",    "accept-encoding":"gzip",    "master":"china",    "user-agent":"okhttp/3.4.1"},"header":"123459","master":"usa","token":"388298a0c89f4a38b2fed4cd4123d441"}

你会发现: “user-agent”:”okhttp/3.4.1” 这是由于okhttp内置拦截器默认添加的。我们需要借助网络拦截器来重新拦截请求头;

解决方法:

利用拦截器来实现对user-agent删除

public class LogInterceptor implements Interceptor {private HttpClient builder;@Overridepublic Response intercept(Chain chain) throws IOException {      Request request = chain.request();      request =request.newBuilder().removeHeader("User-Agent").build();       Response response = chain.proceed(request);       okhttp3.MediaType mediaType = response.body().contentType();       String content = response.body().string();       return response.newBuilder()            .body(okhttp3.ResponseBody.create(mediaType, content))            .build();

然后利用网络拦截器来设置自定义的拦截器LogInterceptor :

Builder okBuilder = new OkHttpClient.Builder()            .connectTimeout(mbuilder.getConnectTimeout(), TimeUnit.SECONDS)            .readTimeout(mbuilder.getReadTimeout(), TimeUnit.SECONDS)            .writeTimeout(mbuilder.getWriteTimeout(), TimeUnit.SECONDS)            .sslSocketFactory(OkhttpUtils.createSSLSocketFactory(), new OkhttpUtils. TrustAllCerts())// 信任所有证书            .hostnameVerifier(new OkhttpUtils.TrustAllHostnameVerifier());LogInterceptor logInterceptor = new LogInterceptor();    logInterceptor.setBuilder(mbuilder);    //okBuilder.addInterceptor(logInterceptor);//应用拦截器    okBuilder.addNetworkInterceptor(logInterceptor);//网络拦截器

最后重新发送网络请求:

{"headers":{    "content-length":"63",    "host":"192.168.253.200:8080",    "client":"Android Client",    "content-type":"application/x-www-form-urlencoded",    "connection":"Keep-Alive",    "accept-encoding":"gzip",    "master":"china"},"header":"123459","master":"usa","token":"388298a0c89f4a38b2fed4cd4123d441"}

说明:接口postParam是返回请求所有参数和请求头信息。代码就不展示出来了。

参考文献:

联系方式:

  • CSDN:
  • Github:
  • 微信公众号:Android 实战开发
  • QQ群:151909524
你可能感兴趣的文章
linux 基础与命令
查看>>
oracle手动升级(8.X/9.X/10.1.X到10.2.X)
查看>>
Python 学习日记第七篇 -- 函数
查看>>
MySQL-函数
查看>>
join 命令详解
查看>>
文件传输保镖——Workshare Pro v8
查看>>
JVM内存溢出处理方案
查看>>
企业日志分析之日志管理
查看>>
我的友情链接
查看>>
Spark(七):局部套用和部分应用。
查看>>
目录 CONTENTs
查看>>
我的友情链接
查看>>
WinAPI: waveInGetErrorText - 根据错误号得到错误描述
查看>>
java的垃圾收集机制
查看>>
haproxy启动故障:Starting proxy:cannot bind socke
查看>>
使用JavaScript修改组件中onclick事件所执行的方法
查看>>
MusicXML 3.0 (10) - 换行、换页
查看>>
chpasswd
查看>>
小型网络拓扑配置
查看>>
UILabel和UITextView行间距
查看>>