Android Okhttp框架获取cookie
2018-01-30 18:18
246 查看
Android 中经常会用到Okhttp网络框架,有时在获取服务器数据时服务器要通过这次请求请求方的一些信息 比如cookie
这时就需要配置
此处以Okhttp的Post请求为例
public Observable<String> post(final String url, final Map<String,String> params){
//创建被观察者
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>(){
@Override
public void call(Subscriber<? super String> subscriber) {
final Subscriber mSubscriber=subscriber;
//没有取消订阅的时候
if(!mSubscriber.isUnsubscribed()){
//获取FormBody.Builder 对象
FormBody.Builder builder=new FormBody.Builder();
//遍历params 将其放入到FormBody.Builder 对象
if(params!=null&&!params.isEmpty()){
for(Map.Entry<String, String> entry :params.entrySet()){
builder.add(entry.getKey(), entry.getValue());
}
}
//获取RequestBody 对象
RequestBody requestBody = builder.build();
//构建post请求
Request request=null;
String cookie=CliniciansApplication.getOkhttpCookie();
if(!BooleanUtils.isEmpty(cookie)){
request=new Request.Builder()
.addHeader("cookie",cookie)
.url(url)
.post(requestBody)
.build();
}else{
request=new Request.Builder()
.url(url)
.post(requestBody)
.build();
}
if(mOkHttpClient!=null){
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//通知订阅者的错误信息
mSubscriber.onError(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(null!=response){//response 不为空
if(response.isSuccessful()){//response 请求成功
Headers headers=response.headers();
List<String> cookies=headers.values("Set-Cookie");
if(cookies.size()>0){
String session=cookies.get(0);
String result=session.substring(0,session.indexOf(";"));
CliniciansApplication.setOkhttpCookie(result);
}
//通知订阅者的成功信息
mSubscriber.onNext(response.body().string());
}else{//response 请求失败
//通知订阅者的错误信息
IOException IOExceptionx=new IOException();
mSubscriber.onError(IOExceptionx);
}
}else{//response 为空
//通知订阅者的错误信息
IOException IOExceptionx=new IOException();
mSubscriber.onError(IOExceptionx);
}
//通知完毕
mSubscriber.onCompleted();
}
});
}
}
}
});
return observable;
}
这时就需要配置
此处以Okhttp的Post请求为例
public Observable<String> post(final String url, final Map<String,String> params){
//创建被观察者
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>(){
@Override
public void call(Subscriber<? super String> subscriber) {
final Subscriber mSubscriber=subscriber;
//没有取消订阅的时候
if(!mSubscriber.isUnsubscribed()){
//获取FormBody.Builder 对象
FormBody.Builder builder=new FormBody.Builder();
//遍历params 将其放入到FormBody.Builder 对象
if(params!=null&&!params.isEmpty()){
for(Map.Entry<String, String> entry :params.entrySet()){
builder.add(entry.getKey(), entry.getValue());
}
}
//获取RequestBody 对象
RequestBody requestBody = builder.build();
//构建post请求
Request request=null;
String cookie=CliniciansApplication.getOkhttpCookie();
if(!BooleanUtils.isEmpty(cookie)){
request=new Request.Builder()
.addHeader("cookie",cookie)
.url(url)
.post(requestBody)
.build();
}else{
request=new Request.Builder()
.url(url)
.post(requestBody)
.build();
}
if(mOkHttpClient!=null){
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//通知订阅者的错误信息
mSubscriber.onError(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(null!=response){//response 不为空
if(response.isSuccessful()){//response 请求成功
Headers headers=response.headers();
List<String> cookies=headers.values("Set-Cookie");
if(cookies.size()>0){
String session=cookies.get(0);
String result=session.substring(0,session.indexOf(";"));
CliniciansApplication.setOkhttpCookie(result);
}
//通知订阅者的成功信息
mSubscriber.onNext(response.body().string());
}else{//response 请求失败
//通知订阅者的错误信息
IOException IOExceptionx=new IOException();
mSubscriber.onError(IOExceptionx);
}
}else{//response 为空
//通知订阅者的错误信息
IOException IOExceptionx=new IOException();
mSubscriber.onError(IOExceptionx);
}
//通知完毕
mSubscriber.onCompleted();
}
});
}
}
}
});
return observable;
}
相关文章推荐
- android - Volley框架请求获取Cookie和带Cookie请求链接和带参数Params
- Android Okhttp框架webView设置Cookie无效问题
- android 中对于采用okhttp时获取cookie并放入webview实现跳过登陆显示页面的功能
- Android的Volley框架实现获取cookie并同步到Webview的实现
- Android之OkHttp框架(一)--基本用法
- 用Okhttp框架登录之后的Cookie设置到webView中(转)
- Android OkHttp3网络请求框架使用入门
- Android 如何封装网络框架(以封装OkHttp为例)
- 用Okhttp框架登录之后的Cookie设置到webView中(转)
- Android-第三方框架-网络请求之okhttp
- 【Android - 框架】之OkHttp的使用
- Android 获取并显示远程图片 Picasso框架的使用
- android okhttp3框架使用
- Okhttp使用简析——Android网络请求框架(一)
- Android 获取并显示远程图片 Picasso框架的使用(二)
- android网络请求框架的学习之路——浅谈对Volley,OkHttp,Retrofit的了解与对比 标签: androidVolleyOkhttpRetrofit网络请求框架
- Android Glide Google 推荐加载图片框架(仅获取BitMap)
- okhttp,Android网络框架学习之OKHttp
- Android网络请求框架----Okhttp3完全解析(1),使用篇
- Android网络编程中关于AsyncHttpClient获取cookie的问题