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请求,支持http和https * @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); }}
阅读全文
0 0
- 浅析 - okHttp3使用总结
- okhttp3使用总结
- okhttp3.2版本使用总结
- okhttp3使用
- okhttp3使用
- okhttp3使用
- okhttp3使用
- okHttp3学习总结
- okhttp3的简单使用
- okhttp3的使用
- Retrofit2+okhttp3 使用教程
- OkHttp3使用详解
- OkHttp3使用详解
- OkHttp3 如何使用
- OkHttp3的使用
- okhttp3使用详解
- OkHttp3使用详解
- Android OKhttp3使用
- POJ 3221:Diamond Puzzle(六数码 反向bfs)
- CSS 关闭按钮实现
- HDU
- 使用浏览器在JavaScript程序中的错误与调试
- 没有脚本的JSP
- okhttp3使用总结
- Linux下profile和bashrc四种的区别
- javascript翻转棋、javascript写的小游戏
- Arcgis 地理配准步骤(底图校正)
- Marriage Match IV HDU
- python_面向对象三
- struct device
- Lintcode 背包问题
- (C++)继承、菱形继承和虚继承的那些事儿