范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

OkHttp完美封装,用一行代码搞定外部请求,使用起来很方便

  OKHttpUtil
  在Java的世界中,Http客户端之前一直是Apache家的HttpClient占据主导,但是由于此包较为庞大,API又比较难用,因此并不使用很多场景。而新兴的OkHttp、Jodd-http固然好用,但是面对一些场景时,学习成本还是有一些的。
  很多时候,我们想追求轻量级的Http客户端,并且追求简单易用。而OKHttp是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用。
  对于 Android App来说,OkHttp 现在几乎已经占据了所有的网络请求操作,对于服务器端请求外部接口也是必备的选择 。针对OKHttp,OkHttpUtil做了一层封装,使Http请求变得无比简单。 OKHttpUtil 功能根据URL自动判断是请求HTTP还是HTTPS,不需要单独写多余的代码。 默认情况下Cookie自动记录,比如可以实现模拟登录,即第一次访问登录URL后后续请求就是登录状态。 自动识别304跳转并二次请求 支持代理配置 支持referer配置 支持User-Agent配置 自动识别并解压Gzip格式返回内容 支持springboot 配置文件 极简的封装调用 OKHttpUtil使用
  maven引入      io.github.admin4j     http     0.4.0 
  最新版查询:
  https://search.maven.org/artifact/io.github.admin4j/http GET
  最简单的使用莫过于用HttpUtil工具类快速请求某个接口:Response response = HttpUtil.get("https://github.com/search", Pair.of("q", "okhttp")); System.out.println("response = " + response); POST
  一行代码即可搞定,当然Post请求也很简单:# JSON 格式的body Response post = HttpUtil.post("https://oapi.dingtalk.com/robot/send?access_token=27f5954ab60ea8b2e431ae9101b1289c138e85aa6eb6e3940c35ee13ff8b6335", "{"msgtype": "text","text": {"content":"【反馈提醒】我就是我, 是不一样的烟火"}}"); System.out.println("post = " + post);  # form 请求 Map formParams = new HashMap<>(16); formParams.put("username", "admin"); formParams.put("password", "admin123"); Response response = HttpUtil.postForm("http://192.168.1.13:9100/auth/login",                 formParams ); System.out.println("response = " + response);
  返回格式为JSON的 可以使用 HttpJsonUtil  自动返回JsonObjectJSONObject object=HttpJsonUtil.get("https://github.com/search", Pair.of("q","http"), Pair.of("username","agonie201218")); System.out.println("object = "+object); 文件上传File file=new File("C:UsersandanyangDownloadsSql.txt"); Map formParams=new HashMap<>(); formParams.put("key","test"); formParams.put("file",file); formParams.put("token","WXyUseb-D4sCum-EvTIDYL-mEehwDtrSBg-Zca7t:qgOcR2gUoKmxt-VnsNb657Oatzo=:eyJzY29wZSI6InpoYW56aGkiLCJkZWFkbGluZSI6MTY2NTMwNzUxNH0="); Response response=HttpUtil.upload("https://upload.qiniup.com/",formParams); System.out.println(response); 下载文件HttpUtil.down("https://gitee.com/admin4j/common-http","path/"); HttpRequest 链式请求# get Response response=HttpRequest.get("https://search.gitee.com/?skin=rec&type=repository") .queryMap("q","admin4j") .header(HttpHeaderKey.USER_AGENT,"admin4j") .execute(); System.out.println("response = "+response);  # post form Response response=HttpRequest.get("http://192.168.1.13:9100/auth/login") .queryMap("q","admin4j") .header(HttpHeaderKey.USER_AGENT,"admin4j") .form("username","admin") .form("password","admin123") .execute(); System.out.println("response = "+response);
  post form 日志16:49:14.092[main]DEBUG io.github.admin4j.http.core.HttpLogger- -->GET http://192.168.1.13:9100/auth/login?q=admin4j http/1.1 16:49:14.094[main]DEBUG io.github.admin4j.http.core.HttpLogger-User-Agent:admin4j 16:49:14.094[main]DEBUG io.github.admin4j.http.core.HttpLogger-Host:192.168.1.13:9100 16:49:14.094[main]DEBUG io.github.admin4j.http.core.HttpLogger-Connection:Keep-Alive 16:49:14.094[main]DEBUG io.github.admin4j.http.core.HttpLogger-Accept-Encoding:gzip 16:49:14.094[main]DEBUG io.github.admin4j.http.core.HttpLogger- -->END GET 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-<--200OK http://192.168.1.13:9100/auth/login?q=admin4j (575ms) 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-transfer-encoding:chunked 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Origin 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Access-Control-Request-Method 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Access-Control-Request-Headers 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Origin 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Access-Control-Request-Method 16:49:14.670[main]DEBUG io.github.admin4j.http.core.HttpLogger-Vary:Access-Control-Request-Headers 16:49:14.671[main]DEBUG io.github.admin4j.http.core.HttpLogger-Content-Type:application/json;charset=utf-8 16:49:14.671[main]DEBUG io.github.admin4j.http.core.HttpLogger-Date:Tue,08Nov 2022 08:49:14GMT 16:49:14.671[main]DEBUG io.github.admin4j.http.core.HttpLogger- 16:49:14.671[main]DEBUG io.github.admin4j.http.core.HttpLogger-{"code":406,"msg":"Full authentication is required to access this resource"} 16:49:14.671[main]DEBUG io.github.admin4j.http.core.HttpLogger-<--END HTTP(76-byte body) response=Response{protocol=http/1.1,code=200,message=OK,url=http://192.168.1.13:9100/auth/login?q=admin4j} 在 Springboot 中使用
  maven引入     io.github.admin4j     common-http-starter     0.4.0 
  最新版查询 io.github.admin4j:common-http-starter
  spring 版可以对 OkHttp进行个性化配置
  配置详见public class HttpConfig {     /**      * 日志等级      */     private HttpLoggingInterceptor.Level loggLevel = HttpLoggingInterceptor.Level.BODY;      /**      * 读取超时时间,秒      */     private long readTimeout = 30;     /**      * 链接超时时间      */     private long connectTimeout = 30;      private boolean followRedirects = false;      /**      * 最大的连接数      */     private int maxIdleConnections = 5;      /**      * 最大的kepAlive 时间 秒      */     private long keepAliveDuration = 5;      private String userAgent = "OKHTTP";     /**      * 是否支持cookie      */     private boolean cookie = false;     private ProxyConfig proxy;       @Data     public static class ProxyConfig {          private Proxy.Type type = Proxy.Type.HTTP;         private String host;         private Integer port = 80;         private String userName;         private String password;     } } 如何快速封装外部接口
  以实体项目为例,封装 ebay接口public class EbayClient extends ApiJsonClient {      /**      * 店铺配置      *      * @param storeId      */     public EbayClient(Long storeId) {          //TODO 获取店铺相关配置         Map config = new HashMap<>();          basePath = "https://api.ebay.com";         defaultHeaderMap.put("Authorization", "Bearer " + config.get("accessToken"));         defaultHeaderMap.put("X-EBAY-C-MARKETPLACE-ID", config.get("marketplaceId"));     } }
  EbayClient  封装ebay api请求 基础类/**  * ebay 库存相关api  * @author andanyang  */ public class EbayInventoryClient extends EbayClient {      /**      * 店铺配置      *      * @param storeId      */     public EbayInventoryClient(Long storeId) {         super(storeId);     }      /**      * 库存列表      *      * @param limit      * @param offset      * @return      * @throws IOException      */     public JSONObject inventoryItem(Integer limit, Integer offset) throws IOException {          Map queryMap = new HashMap(2);         queryMap.put("limit", limit);         queryMap.put("offset", offset);         return get("/sell/inventory/v1/inventory_item", queryMap);     } }
  EbayInventoryClient  封装ebay 库存 api请求
  使用EbayInventoryClient ebayInventoryClient=new EbayInventoryClient(1L); JSONObject jsonObject=ebayInventoryClient.inventoryItem(0,10); /**  * 订单相关api  * @author andanyang  */ public class EbayOrderClient extends EbayClient {       /**      * 店铺配置      *      * @param storeId      */     public EbayOrderClient(Long storeId) {         super(storeId);     }      /**      * 订单列表      *      * @param beginTime      * @param endTime      * @param limit      * @param offset      * @return      */     public JSONObject orders(String beginTime, String endTime, int limit, int offset) {          final String path = "/sell/fulfillment/v1/order";          String filter = MessageFormat.format("lastmodifieddate:[{0}..{1}]", beginTime, endTime);          //         Map queryMap = new HashMap<>(8);         queryMap.put("filter", filter);         queryMap.put("limit", limit);         queryMap.put("offset", offset);          return get("/sell/inventory/v1/inventory_item", queryMap);     } }
  库存相关的使用EbayInventoryClient ,订单相关的使用EbayOrderClient ,是不是很清晰
  源码位置:
  https://github.com/admin4j/common-http 感谢阅读,希望对你有所帮助 :)
  来源:andyoung.blog.csdn.net/article/details/127755025

人体自带的止咳开关,还能化痰养肺但这4种特殊咳嗽,要及时就医最近天气多变早晚温差大,很多人都感冒咳嗽了。有人干咳,有人咳痰,有人一直咳不停咳嗽很多时候可能不是大问题,但咳起来真是难受,有时咳得嗓子疼,胸口也是阵阵发痛,睡不好吃不香为了止咳,你是高危险群吗?这4种人最容易长息肉近十年的统计,大肠癌发生率盘据十大癌症之首,其实大肠癌是最容易预防的癌症之一。诱发大肠癌危险因子中约15归因于遗传,包含家族性大肠直肠息肉遗传性非息肉大肠直肠癌肠道病史如腺瘤性息肉人老了,不管以前关系多好,这三个人少联系为妙文时光了了人,皆有老去的那一天,岁月就是这样,带来一批又一批新生命,带走一个又一个历经时光蹉跎的老人,一代又一代的传承一代又一代地更迭。从世界的大角度来看,人不过是沧海一粟,不过是情感千篇一律长路奉献给远方玫瑰奉献给爱情在这个善变的世界我想和你看一看永远不主动害怕失去你太主动怕自作多情伸手怕犯错缩手怕错过多一点怕打扰少一点怕遗憾我想见你但我很清楚的知道唯有你想见我的时候数字化时代勒索病毒同步进化,企业如何防范网络安全风险伴随5G边缘计算数字孪生等技术的发展,传统企业迈入数字化转型时代,但与之相对的,是同步进化的勒索病毒与勒索团伙。云时代网络安全解决方案提供商PaloAltoNetworks(派拓网创业之前,能向亲朋好友借钱吗?随着工作越来越让人们厌烦,很多人都想自己创业,随便做点什么事情都要比工作好很多。可现实是,我们大多数人的启动资金是不够的。举个例子,我们特别想要开一家餐厅,自己本身准备了20万元。11!欧冠8。6亿强阵大逆袭晋级,垫底变领头羊,新帅居首功欧冠小组赛接近尾声,第5轮的第一个比赛日已经结束,G组和H组的2个出线名额已经诞生,G组的曼城和多特蒙德携手出线H组的巴黎圣日耳曼和本菲卡携手出线。F组的皇马也已经提前出线,莱比锡国际原油贵金属期货涨跌不一国际原油贵金属期货涨跌不一中证网讯(记者马爽)当地时间10月24日(周一),国际原油期货贵金属期货收盘涨跌不一。Wind数据显示,截至收盘,原油期货方面,NYMEXWTI原油期货合1杯奶茶能量值可高达6碗饭?奶茶为啥让你越喝越上瘾受访专家北京食品学会老年食品与健康专委会副主任委员中国农业大学营养与食品安全博士后王国义环球时报健康客户端记者王淑颖要问食品界的流量担当是谁?奶茶当之无愧。国庆假期前,秋天的第一杯鹅肉是发物,会导致癌症复发和转移?加速癌细胞生长或是4种食物浙江的张大伯被查出晚期结肠癌伴随肝转移后,就格外注重饮食。他认为鸡鸭鱼肉都是发物,会加速癌细胞的发展,所以通通不吃,平时支持吃点青菜白粥。结果在治疗期间,张大伯的营养跟不上,病情恶建议中老年这3种碱性食物要多吃,口臭没了,皮肤不油腻了建议中老年这3种碱性食物要多吃,口臭没了,皮肤不油腻了很多人都有口臭的毛病,一张嘴就尴尬了,其实一般都是消化不良引起的,要注意调节饮食,多吃一些碱性食物。日常生活中,我们吃的食物有
武汉还需要户部巷吉庆街吗?已经记不得有多久没去户部巷了,作为一个老武汉人,感觉很对不起武汉市市长。在2023年的政府工作报告中,武汉市把户部巷作为重点发展的11个特色街区之一。不过,在老武汉人的眼里,户部巷ChatGPT的兴起及其对未来年轻人思想的影响在今天这个快节奏的世界里,技术已经深入到我们生活的各个方面。从我们的沟通方式到我们的学习方式,技术已经改变了我们的思维和行为方式。近年来出现的最具创新性的在线平台之一是ChatGP淄博烧烤为何能抓住年轻人的心近日,山东淄博因独具特色的烧烤文化火速出圈,成为全国各地大学生竞相奔赴打卡的网红城市。类似大学生组团到淄博吃烧烤等话题,频繁冲上各大网络平台热搜。淄博火车站的统计显示,该站3月5日旧京图说皇家园林寺庙和四合院,旧京赏花路线在这里北京日报旧京图说记者孙文晔北京的春天咣当一下来了,又呼啦一下走了,从迎春花向阳而开,到紫藤花如瀑而下,短短一个多月间,长安街的玉兰玉渊潭的樱花元大都的海棠,次第开放,一日比一日更盛姻缘殿里无人问津,财神殿里长跪不起这届年轻人只上香,不上进?停一停!别贴标签了!不是去心心念念的网红店打卡不是去桌游店里来一盘刺激的狼人杀不是在电影院里宅一下午现在年轻人的周末到底被谁占领了?答案是去上香了不知道啥时候起虔诚寺庙之类的词汇和年轻人绑定在了一起票一些CP服装拾遗CP的版本故事(6)无人问津的沙色G2作者thefull9来源thefull9G2AC在商业销售时有3种纯色可选游侠绿黑色和沙色。当年在产时,纯色不是特别受欢迎,二手价格相对合理和稳定。此前我对沙色,或者说卡其色不太感苏联女叛徒暗杀一千五百多名同胞,潜逃异国30年,终露出马脚被抓说起大名鼎鼎的苏联克格勃(KGB),大家想必都不会陌生。如今的俄罗斯总统普京,就是当年的苏联克格勃出身。在冷战时期,苏联克格勃足以与美国中央情报局(CIA)相提并论。20世纪70年13世纪初期,利普二世为何授予巴黎大学特许状?特许状有何权益?巴黎大学成立之初,法兰西国王经常对其放任不管。随着罗马教权日渐式微,王权日渐强盛,国王逐渐控制了巴黎大学,逐步授予巴黎大学更多特许权。菲利普四世重申巴黎大学之前的特许权。法兰西国王575万奖金!2023年数学界诺贝尔奖揭晓文中国科学报记者韩扬眉3月22日,被誉为数学界诺贝尔奖的阿贝尔奖揭晓。挪威科学和文学学院决定将2023年阿贝尔奖授予美国得克萨斯大学奥斯汀分校教授路易斯卡法雷利(LuisA。Caf范筑先抵抗外侮(三)做民族解放的筑路先锋(二)1926年南方革命风潮再起,国民革命军高举打倒帝国主义及其走狗北洋军阀,扫除封建势力的旗帜出师北伐,他们所向披靡,动摇了帝国主义和封建军阀在中国的反动统治王昌龄七绝圣手死于一场莫名的谋杀唐肃宗至德二年(公元七五七年),大唐王朝正值安史之乱,社会动荡,人心惶惶。就在这一年的秋天,安徽亳州发生了一起骇人听闻的恶性事件,大唐著名边塞诗人王昌龄,在返乡途中,被亳州刺史闾丘