当前位置: 首页 > 后端技术 > Java

Java中使用HttpUtils发送HTTP请求

时间:2023-04-01 13:47:01 Java

微信公众号:冯文义(ID:fwy-world)HTTP请求在日常开发中比较常见。今天给大家分享一下HttpUtils的使用方法。阅读本文后,您将获得:HTTP请求常用配置的简要总结;如何在JavaLib中使用HttpUtils;如何封装HTTP请求工具类。第1部分:HTTP请求常用配置小结大家好。在Java开发中,我们经常会遇到调用第三方提供的接口服务的需求。常见的形式是HTTP+JSON。下面,我们就HTTP请求的常用设置进行说明。http提供了多种请求方式来满足我们日常的需求。首先我们根据请求方式进行说明:GETPOSTPUTPATCHDELETE在RESTfulAPI开发中,我们可以根据这些请求方式来设计我们的API接口。例如:GET:获取资源POST:提交资源PUT:更新完整资源PATCH:更新部分资源DELETE:删除资源get("https://www.baidu.com"));响应结果:通过简单的实验,证明了两点:第一,这个还是可以用的;其次,事实证明它非常易于使用。如果你想手写一个http请求,可能你脑子里一片空白,就会去搜索各种资料。再试一个复杂的接口:接口地址:https://erwin-api.fengwenyi.com/erwin/blog/page请求方式:GET参数:currentPage,pageSize参数格式:form响应:application/jsonStringurl="https://erwin-api.fengwenyi.com/erwin/bookmark/page?currentPage=1&pageSize=10";Requestrequest=newRequest();request.setUrl(url);request.setMethod(Request.Method.GET);MapheaderMap=newHashMap<>();headerMap.put("Accept","application/json");Request.Optionoption=newRequest.Option();option.setHeaders(headerMap);try{System.out.println(HttpUtils.execute(request,option));}catch(IOExceptione){thrownewRuntimeException(e);}响应结果:{"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":"software","classifyId":"1522587269600481281"},{"id":"1632640455110922241","timestamp":1678086792000,"enabledState":null,"name":"Spring_星夜孤粉博客-CSDN博客中init-method和destroy-method的四种方式","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":"frontend","classifyId":"1525554881275990018"},{"id":"1631593154401636354","timestamp":1677837096000,"enabledState":null,"name":"SpringBean创建过程源码分析-腾讯云开发者社区-腾讯云","网址":"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":"SpringBoot","classifyId":"1522586446766116865"},{"id":"1631586585454678018",“时间戳”: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":"一文读懂SpringBeanLifecycle_springbean生命周期_老周聊架构博客-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"}]}}响应结果还是符合预期的当然HTTP还有其他的东西,比如timeout等等。我们来看完整版的请求例子:MapparamMap=newHashMap<>();paramMap.put("currentPage",1);paramMap.put("pageSize",10);MapheaderMap=newHashMap<>();headerMap.put("Accept","application/json");Requestrequest=newRequest();request.setUrl("https://erwin-api.fengwenyi.com/erwin/bookmark/page");request.setParam(paramMap);request.setMethod(Request.Method.GET);request.setUtil(请求.Util.OkHttp);Request.Option选项=newRequest.Option();option.setHeaders(headerMap);option.setConnectTimeoutSecond(3);option.setReadTimeoutSecond(5);option.setLogLevel(Request.LogLevel.DEBUG);try{Stringresult=HttpUtils.execute(请求,选项);System.out.println(result);}catch(IOExceptione){thrownewRuntimeException(e);}响应结果也同上。第三部分:分享HttpUtils是如何封装的。首先,Request和Response分别对应HTTP的请求和响应。包路径如下:com.fengwenyi.javalib.http.Requestcom.fengwenyi.javalib.http.Response另外com.fengwenyi.javalib.http.Request.Option存放HTTP参数配置。这部分的思路来源于SpringCloudOpenFeign。为了兼容各种HTTP工具实现请求,引入了HttpClientFactory。其他工具类只需要实现HttpClient接口即可。com.fengwenyi.javalib.http.client.HttpClientcom.fengwenyi.javalib.http.client.HttpClientFactory好了,我们看下面的代码:检查(请求);HttpClienthttpClient=HttpClientFactory.get(request.getUtil());响应response=httpClient.execute(request,option);returnhandleResponse(response);}HttpClientFactory#getpublicstaticHttpClientget(httpUtil.Util){if(Request.Util.JDK==httpUtil){返回新的JdkHttpClient();}elseif(Request.Util.OkHttp==httpUtil){returnnewOkHttpClient();}else{thrownewRuntimeException("找不到httputil:"+httpUtil.name());}}所以,只需实现HttpClient#execute接口即可。响应execute(Requestrequest,Request.Optionoption)throwsIOException;源码:https://github.com/fengwenyi/JavaLib好了,今天的分享就到这里。我是小峰,一名Java程序员,专注于程序设计和开发。如果您在开发中遇到问题,欢迎与我们交流。微信公众号:冯文义(ID:fwy-world)。

最新推荐
猜你喜欢