okhttp3使用总结

来源:互联网 发布:win10系统安装mac os 编辑:程序博客网 时间:2024/06/14 04:42

okhttp简介

    okhttp是一个封装URL,比HttpClient更友好易用的工具.

特点

1.支持http和https协议,api相同,易用;
2.http使用线程池,https使用多路复用;
3.okhttp支持同步和异步调用;
4.支持普通form和文件上传form;
5.提供了拦截器,操作请求和响应(日志,请求头,body等);
6.okhttp可以设置缓存;

使用

1.创建OkHttpClient对象;
2.设置timeout时间,包括连接超时,读超市,写超时;
3.可选(拦截器);
4.创建RequestBody对象,即请求体;
5.创建Request对象,发送请求;
6.创建Response对象,接受响应内容;

源码链接

链接:http://pan.baidu.com/s/1miJVETa 密码:ldsc

封装的工具类

import com.alibaba.fastjson.JSON;import com.google.common.collect.Maps;import okhttp3.*;import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.IOException;import java.util.Arrays;import java.util.Map;import java.util.concurrent.TimeUnit;/** * @author lcj * @version 1.0 * @description okhttp get post工具类 * @Create 2017-06-16 */public class OkHttpUtil {    private static final Logger LOGGER = LoggerFactory.getLogger(OkHttpUtil.class);    private static final OkHttpClient CLIENT;    static {        CLIENT = new OkHttpClient.Builder()                .connectTimeout(10, TimeUnit.SECONDS) //连接超时                .writeTimeout(10, TimeUnit.SECONDS) //写超时                .readTimeout(30, TimeUnit.SECONDS) //读超时                .build();    }   public enum OkHttpMethod {        POST,        PUT,        DELETE    }    /**     * get请求,支持http和https     * @param url 地址,比如: http://wwww.baidu.com     * @param params 参数,可以为null     * @param headers 请求头,可以为null     * @return     */    public static String get(String url,Map<String,Object> params,Map<String,String> headers){        //Builder对象        Request.Builder builder = new Request.Builder();        //处理参数        if(null != params && params.size() > 0){            StringBuilder stringBuilder = new StringBuilder("?");            params.forEach((k,v) -> {                stringBuilder.append(k).append("=").append(v).append("&");            });            String param = stringBuilder.toString();            url += param.substring(0,param.lastIndexOf("&"));        }        //处理请求头        if(null != headers && headers.size() > 0){            headers.forEach((k,v) -> builder.header(k,v));        }        //LOGGER.info("url:{}",url);        Request request = builder.url(url).build();        //LOGGER.info("所有的请求头: ");        //request.headers().toMultimap().forEach((k,v) -> {        //    LOGGER.info("{} : {}",k,v);        //});        //创建响应对象        try {            Response response = CLIENT.newCall(request).execute();            if(!response.isSuccessful()){                LOGGER.error("发送get请求失败,状态码:{}",response.code());                return "";            }            return response.body().string();        } catch (IOException e) {            LOGGER.error("发送get请求失败,原因:{}",e.getCause());            return "";        }    }  /**     * post,put,delete请求,支持httphttps     * @param url 地址,比如: http://wwww.baidu.com     * @param params 参数,可以为null     * @param headers 请求头,可以为null     * @param okHttpMethod 请求方式     * @return     */    public static String postOrPutOrDelete(String url,Map<String,Object> params,Map<String,String> headers,OkHttpMethod okHttpMethod){        //Builder对象        Request.Builder builder = new Request.Builder();        //处理请求头        if(null != headers && headers.size() > 0){            headers.forEach((k,v) -> builder.header(k,v));        }        //处理参数        if(null != params && params.size() > 0){            RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), JSON.toJSONString(params));            switch (okHttpMethod){                case POST:                    builder.post(body);                    break;                case PUT:                    builder.put(body);                    break;                case DELETE:                    builder.delete(body);                    break;                default:                    builder.post(body);                    break;            }        }else {            switch (okHttpMethod){                case DELETE:                default:                    builder.delete();                    break;            }        }        //LOGGER.info("url:{}",url);        Request request = builder.url(url).build();        //LOGGER.info("所有的请求头: ");        //request.headers().toMultimap().forEach((k,v) -> {        //    LOGGER.info("{} : {}",k,v);        //});        //创建响应对象        try {            Response response = CLIENT.newCall(request).execute();            if(!response.isSuccessful()){                LOGGER.error("发送请求失败,状态码:{}",response.code());                return "";            }            return response.body().string();        } catch (IOException e) {            LOGGER.error("发送请求失败,原因:{}",e.getCause());            return "";        }    }    public static void main(String[] args) {        String url = "http://wwww.baidu.com";        Map<String,Object> params = Maps.newHashMap();        params.put("title","title");        params.put("age",23);        params.put("sex",true);        Map<String,String> headers = Maps.newHashMap();        headers.put("User-Agent","Android");        headers.put("Content-Type","application/json");        String result = get(url,params,headers);        System.out.println(result);    }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 Mac电脑ai卡住了怎么办 pr字幕打不了字怎么办 pr手写字多笔画怎么办 家中挖矿噪音很大怎么办 学了栏目包装不想干怎么办 在文本打字乱了怎么办 体考后觉得成绩有出入怎么办 荧光棒进眼睛里怎么办 无法读源文件或磁盘怎么办 爱剪辑视频横着怎么办 pr界面字体太小怎么办 0p手机卡槽坏了怎么办 pr视频有水波纹怎么办 手机耳机插口插上没声音怎么办 xp系统电脑没有声音怎么办 win10笔记本耳机没声音怎么办 电脑插耳机还是外放怎么办 主机电脑耳机插孔坏了怎么办 苹果6plus有点卡怎么办 手机拨通电话后黑屏怎么办 手机拨通后没声音怎么办 苹果手机铃声不响了怎么办 婴儿喘气粗好像有痰怎么办 金毛呼吸声很大怎么办 回看福建导视该怎么办 楼上木地板走路声音都很响怎么办 班里团支不搭理我我该怎么办 客户买家具说贵怎么办 英雄联盟超出显示范围怎么办 脸上有斑点怎么办内条 脖子扭到了一动就疼怎么办 杭州限行在路上怎么办 在路上限行了怎么办 微信号不能进群怎么办 在微信约妹子被骗2000怎么办 qq号进不了热聊怎么办 网上买彩票中五百万怎么办 别人登我支付宝怎么办 医保刷卡刷到现金支付怎么办 微信诈骗立案后怎么办 奔跑吧诈骗填写了身份证怎么办