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

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

德媒德国和欧盟对哈萨克斯坦兴趣日益增加德国世界报网站11月18日发表题为同俄罗斯的这些良好关系让整个欧洲受益的文章,作者是菲利普福尔克曼施卢克。全文摘编如下在德国,仍然邀请俄罗斯高层人物参加的公共庆祝活动不多,其中之一人均寿命突破80岁!德国人的4个长寿秘诀,我们或许也能做到现在人们的生活水平提高了,越来越多的人开始加入到养生的队伍中来,许多人认为养生是为了更加健康的生活,也是为了可以延年益寿。国人提到长寿,可能首先都会想到日本,但其实还有一个长寿国家1950年,贵州一位瓦匠写信给杨勇将军我没牺牲,请给我安排工作1949年10月1日,毛主席在天安门城楼上,向全世界郑重宣告中华人民共和国在今天成立了!这是划时代的一句宣告,标志着中华民族从这天起,便重新踏上一个新的时代。图人民群众夹道欢迎剿匪不被看好,却一路逆袭,位居全球前十,国产手机界的黑马来了根据市场研究公司Omdia公布的数据显示,2022年第三季度全球手机出货量前十榜单中,国产手机品牌占据了八个席位,华为重返前十,而realme则以1360万台的成绩位居全球第八。短斯诺克德国大师赛赵心童田鹏飞晋级!颜丙涛与丁俊晖赛程安排北京时间2022年11月24日凌晨,斯诺克德国大师赛资格赛结束了五场晋级轮的争夺,产生5名德国大师赛正赛选手,其中包括两名中国选手卫冕冠军赵心童与田鹏飞。颜丙涛与丁俊晖将陆续争夺德墨西哥主帅我们没给波兰多少机会接下来的比赛都是决赛在此前结束的卡塔尔世界杯C组的比赛中,凭借着墨西哥门将奥乔亚的神勇扑点,墨西哥00战平波兰。赛后,在接受媒体的采访时,墨西哥主帅马蒂诺谈到了球队本场比赛的表现。关于本场比赛球队的表中超国安被业余球队打败,比分5比7,成为足协杯最大笑话足球是中国永远的痛,也是最提不起来的一项运动,已经沦为了大家茶余饭后的笑话,这其中更多的是由主观因素造成的,所以球迷才会怨声载道。近期的足协杯上,专业的中超国安队竟然被业余的甘肃泾艾顿谈与贝弗利冲突我喜欢它我表现得很强硬北京时间11月23日,今日太阳主场迎战湖人。全场战罢,太阳115105战胜湖人。赛后,太阳球员德安德烈艾顿接受了采访,谈及末节自己和湖人后卫帕特里克贝弗利的冲突我喜欢它。我表现得很中国足球,也曾强大二十世纪之初,现代足球由欧洲传入中国。三十年代在上海流传的一句话。看戏要看梅兰芳,看球要看李惠堂。在旧中国,一位体坛人物能够和京剧大师梅兰芳的名字相提并论,确实非凡。李惠堂以顽强的湖人105115太阳!谁注意王猛赛后评价,一番话直戳痛处今日NBA常规赛,湖人以105115输给了太阳,三连胜被终结。此役过程跌宕起伏,首节太阳领先4分,次节湖人占据上风,第三节太阳继续压着湖人打,末节湖人虽然屡次发起反扑,可惜始终无力2022年江西省机关事业单位退休人员死亡待遇是多少?根据江西省相关政策,江西省机关事业单位退休人员去世后,遗属可以享受丧葬费一次性抚恤金。符合条件的,还可以享受遗属生活补助。1。丧葬费机关事业单位退休人员标准一样,统一按5000元发
一套高端音响,在家享受影院效果对于喜欢在家看电影的朋友来说,想要在家里就能享受到影院般的视觉效果,那么就需要一个家庭影院来帮忙。下面推荐的这些家用影院套装,拥有强大的音效,能够带给你身临其境的感觉,让你在家中也乳液推荐这些乳液补水修复提升毛孔屏障功能强化肌肤防御功能乳液推荐这些乳液补水修复提升毛孔屏障功能强化肌肤防御功能!IPSA自律循环乳(适合任何肌肤)IPSA的自律乳液真的是乳液界中的断货王,看起来很简约,但是一点都不简单哦,有预防敏感提皮肤补水小方法,远离秋日干燥肌肤补水方法1水果和蔬菜保湿方法。水果和蔬菜不仅可以吃来补充身体的营养,而且是最营养和健康的保湿皮肤的好选择。女孩通常可以吃更多的水果和蔬菜,如黄瓜苹果葡萄樱桃等,这些水果和蔬菜可以充烧茄子最好不要焯水,营养成分丢失,最好别这样做红烧茄子是一道历史悠久的特色传统佳肴,关于红烧茄子的做法,最早可以追溯到北魏贾思勰所著的齐民要术,这是关于红烧茄子最早的历史记载。关于烧茄子的做法有很多很多,但是文心认为,烧茄子最历史古代没有牙刷,那古人怎么清洁牙齿呢?这个问题挺有意思的。其实小时候我总好奇,你说这古代人咋刷牙呢?其实刷牙这个习惯并非中国本土出现,而是受到佛教的影响。在早期中国人并没有刷牙的意识,在礼记。内则中有这样的记载子事父母剩饭这样处理,早餐又多了一个花样,简单快捷!非常有食欲冰箱剩饭这样处理一下,早餐又多了一个花样,简单快捷!还非常有食欲!!剩饭煎饼所需食材食材用料剩饭175g鸡蛋1个葱花10g黑胡椒粉适量胡萝卜丁30g面粉25g培根2片制作步骤1准备女人一旦超40岁,秋季别露腿肚子!脚踝裙才是新选项,真高级真正有魅力的女人从不慌张,面对任何事情都能冷静处理。正是因为有着泰山崩于前也面不改色的强大心理,才让她们浑身像是沐浴着圣洁的光芒,即使是穿着简约基础的衣服,也能感受到优雅与松弛,在单依纯凭借中国好声音出道,风格却相似,唱功被过分吹捧了?单依纯凭借中国好声音出道以后,就受到了许多人的关注,不过她的歌曲听多了就会发现风格却是很相似的,难道她的唱歌被过分吹捧了?其实,单依纯的唱功没有被过分吹捧,相反,在歌唱选秀泛滥的网半身裙怎么穿更洋气?教你几招小技巧,优雅又显瘦,适合中年女人半身裙是当之无愧的穿搭万金油,春夏秋冬通过不同的搭配都可以很好的打造出优雅高级的时尚感,完美满足各种场合的穿衣需求。柔美又具有空荡感的裙摆不仅遮肉显瘦的效果一绝,还可以很好的凸显出看了86岁谢芳的老年穿搭,才发现中老年女人不扮嫩,气质更优雅在不少人眼中,老是一个很可怕的词,意味着我们的容貌身材都不再年轻,而是呈现一副老态模样。不过正如杜拉斯所言你年轻时很美,但相比那时,我更喜欢现在你历经沧桑的容颜,或许年轻是人们所追知名演员娟子凭令妃大火,出道多年零绯闻,57岁越活越优雅有生之年,欣喜相逢,点击上方关注一起抒写更多温暖的故事。娟子活得漂亮的人,无非是活出了她内心深处想要的模样,而非活在他人的评价里虚度时光。这是知名演员娟子在自己社交平台的个人简介里