赞
踩
最近在调用一些网站的接口的时候会被限制——电脑上访问可以正常返回数据,而在android上访问却报503错误。
猜测网站端根据 User-Agent 去识别用用户标识。
解决:
首先 谷歌浏览器 F12 然后访问接口 找到你访问的接口 单击
这样就获得到了不被限制的User-Agent
然后android进行网络请求时 去替换User-Agent
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();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。