Part 1: A brief summary of common configurations for HTTP requests
Part 2: Using JavaLib’s HttpUtils
Part 3: Share how HttpUtils is encapsulated
HTTP requests are relatively common in daily development. Today I will share with you how to use HttpUtils.
Read this article, you will gain:
A brief summary of common configurations of HTTP requests;
How to use HttpUtils in JavaLib;
How to encapsulate the HTTP request tool class.
Hello everyone, in Java development, we often encounter the need to call interface services provided by third parties. Common forms It is HTTP JSON. Below, we will explain the common settings of http requests.
http provides a variety of request methods to meet our daily needs. Let us first explain by request method:
GET
POST
PUT
PATCH
DELETE
In RESTful API development, we can design our API interface based on these request methods. Example:
GET: Get resources
POST: Submit resources
PUT: Update complete Resources
PATCH: Update some resources
DELETE: Delete resources
Parameter format
form form
json
System.out.println(HttpUtils.get("https://www.baidu.com"));Response result:
<!DOCTYPE html><!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png style="max-width:90%"How to use HttpUtils to send HTTP requests in Java" > </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>'); </script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri >更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号 <img src=//www.baidu.com/img/gs.gif alt="How to use HttpUtils to send HTTP requests in Java" > </p> </div> </div> </div> </body> </html>Through a simple attempt, two points are proved: First, this can still be used; second, it turns out to be so easy to use. If you are asked to write an http request by hand, maybe there will be a blank in your mind and you will search for various information. Let’s try another complex interface: Interface address: https://erwin-api.fengwenyi.com/erwin/blog/page Request method: GET
Parameters: currentPage, pageSize
Parameter format: form
Response: application/json
##
String url = "https://erwin-api.fengwenyi.com/erwin/bookmark/page?currentPage=1&pageSize=10"; Request request = new Request(); request.setUrl(url); request.setMethod(Request.Method.GET); Map<String, String> headerMap = new HashMap<>(); headerMap.put("Accept", "application/json"); Request.Option option = new Request.Option(); option.setHeaders(headerMap); try { System.out.println(HttpUtils.execute(request, option)); } catch (IOException e) { throw new RuntimeException(e); }Response result :
{ "code":"SUCCESS", "message":"Success", "success":true, "header":null, "body":{ "currentPage":1, "pageSize":10, "totalRows":661, "totalPages":67, "content":[ { "id":"1634772578877935617", "timestamp":1678595130000, "enabledState":null, "name":"VScode 中文显示出现黄色方框的解决方法_vscode汉字被框住_YJer的博客-CSDN博客", "url":"https://blog.csdn.net/qq_33249042/article/details/123252625", "icon":null, "classifyName":"软件", "classifyId":"1522587269600481281" }, { "id":"1632640455110922241", "timestamp":1678086792000, "enabledState":null, "name":"Spring中init-method和destroy-method的四种方式_星夜孤帆的博客-CSDN博客", "url":"https://blog.csdn.net/qq_38826019/article/details/117387398", "icon":null, "classifyName":"Spring", "classifyId":"1522586360887742466" }, { "id":"1631597310596190209", "timestamp":1677838087000, "enabledState":null, "name":"vue3 + elemenplus实现导航栏 - 掘金", "url":"https://juejin.cn/post/7084871748608327687", "icon":null, "classifyName":"前端", "classifyId":"1525554881275990018" }, { "id":"1631593154401636354", "timestamp":1677837096000, "enabledState":null, "name":"Spring bean 创建过程源码解析 - 腾讯云开发者社区-腾讯云", "url":"https://cloud.tencent.com/developer/article/1631160", "icon":null, "classifyName":"Spring", "classifyId":"1522586360887742466" }, { "id":"1631592987673858050", "timestamp":1677837056000, "enabledState":null, "name":"SpringBoot之容器启动源码分析与Bean加载_springboot加载bean 源码_minemine0418的博客-CSDN博客", "url":"https://blog.csdn.net/minemine0418/article/details/102308912", "icon":null, "classifyName":"Spring Boot", "classifyId":"1522586446766116865" }, { "id":"1631586585454678018", "timestamp":1677835530000, "enabledState":null, "name":"Spring-Bean生命周期 - 知乎", "url":"https://zhuanlan.zhihu.com/p/158468104", "icon":null, "classifyName":"Spring", "classifyId":"1522586360887742466" }, { "id":"1631579732104548354", "timestamp":1677833896000, "enabledState":null, "name":"一文读懂 Spring Bean 的生命周期_spring bean的生命周期_老周聊架构的博客-CSDN博客", "url":"https://blog.csdn.net/riemann_/article/details/118500805", "icon":null, "classifyName":"Spring", "classifyId":"1522586360887742466" }, { "id":"1630768897186697218", "timestamp":1677640578000, "enabledState":null, "name":"MySQL同时统计多个条件的记录条数_ztnhnr的博客-CSDN博客", "url":"https://blog.csdn.net/ztnhnr/article/details/107165942", "icon":null, "classifyName":"MySQL", "classifyId":"1522586805693681666" }, { "id":"1630768792098410497", "timestamp":1677640553000, "enabledState":null, "name":"sql查询近七天,近两周,近一个月的数据_sql最近一周数据_心诚则灵'的博客-CSDN博客", "url":"https://blog.csdn.net/wenchangwenliu/article/details/119891790", "icon":null, "classifyName":"MySQL", "classifyId":"1522586805693681666" }, { "id":"1630480535938764801", "timestamp":1677571827000, "enabledState":null, "name":"开源流程引擎哪个好,如何选型? - 知乎", "url":"https://zhuanlan.zhihu.com/p/369761832", "icon":null, "classifyName":"Java", "classifyId":"1522586296119300097" } ] } }
The response result is still in line with expectations.
Of course, there are other things like HTTP, such as timeout, etc. Let’s take a look at the complete request example:
Map<String, Object> paramMap = new HashMap<>(); paramMap.put("currentPage", 1); paramMap.put("pageSize", 10); Map<String, String> headerMap = new HashMap<>(); headerMap.put("Accept", "application/json"); Request request = new Request(); request.setUrl("https://erwin-api.fengwenyi.com/erwin/bookmark/page"); request.setParam(paramMap); request.setMethod(Request.Method.GET); request.setUtil(Request.Util.OkHttp); Request.Option option = new Request.Option(); option.setHeaders(headerMap); option.setConnectTimeoutSecond(3); option.setReadTimeoutSecond(5); option.setLogLevel(Request.LogLevel.DEBUG); try { String result = HttpUtils.execute(request, option); System.out.println(result); } catch (IOException e) { throw new RuntimeException(e); }
The response result is also the same as above.
Part 3: Share how HttpUtils is encapsulated
and Response
correspond to HTTP requests and responses. The package path is as follows:
is used to store HTTP parameter configuration. The source of ideas for this part is Spring Cloud OpenFeign.
In order to be compatible with multiple HTTP tools to implement requests,
HttpClientFactory is introduced. Other tool classes only need to implement the HttpClient
interface.
public static String execute(Request request, Request.Option option) throws IOException { check(request); HttpClient httpClient = HttpClientFactory.get(request.getUtil()); Response response = httpClient.execute(request, option); return handleResponse(response); }HttpClientFactory#get
public static HttpClient get(Request.Util httpUtil) { if (Request.Util.JDK == httpUtil) { return new JdkHttpClient(); } else if (Request.Util.OkHttp == httpUtil) { return new OkHttpClient(); } else { throw new RuntimeException("not find http util: " + httpUtil.name()); } }So, just Just implement the
HttpClient#execute
interface.Response execute(Request request, Request.Option option) throws IOException;
The above is the detailed content of How to use HttpUtils to send HTTP requests in Java. For more information, please follow other related articles on the PHP Chinese website!