最近在调用一些网站的接口的时候会被限制——电脑上访问可以正常返回数据,而在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();