文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

http请求怎么在spring boot中使用

2023-05-30 19:18

关注

今天就跟大家聊聊有关http请求怎么在spring boot中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

首先是经过封装:

一:初始化httpclient

private static HttpClient client = null; static { PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); cm.setMaxTotal(128);cm.setDefaultMaxPerRoute(128);client = HttpClients.custom().setConnectionManager(cm).build(); }

二:获取请求的url,因为我服务端定义的url与客户端一样,所以我直接使用请求客户端的url

//根据request获取请求的urlpublic StringBuffer getUrlToRequest(HttpServletRequest request) { StringBuffer url=request.getRequestURL();//获取请求的url(http://localhost:8080/switch/getStudentInfoByName) String[] splitArr=url.toString().split("/"); String appName=splitArr[3];//项目名称 String ipReport=splitArr[2];//项目ip:report String resultStr=url.toString().replaceAll(appName,DevFacConstans.facname).replaceAll(ipReport, DevFacConstans.ip+":"+DevFacConstans.report); return new StringBuffer(resultStr); }

获取url根据/ 进行split,因为我这是测试环境,生产环境ip,端口号(域名)肯定不是localhost,有的前面还会加上项目名称,所以我split对应的值来进行替换。

三:拼装请求参数,调用http请求

public String sendHttpToDevFac(HttpServletRequest request)throws Exception { HttpClient client = null; String returnResult=""; // http://localhost:8080/leo/1.0/h6/login StringBuffer urlBuffer=getUrlToRequest(request);//调用第二步,获取url //获取参数并拼装String dataAsJson = request.getParameter("data"); String encoderData=URLEncoder.encode(dataAsJson,"utf-8"); HttpGet get=new HttpGet(urlBuffer.append("?data=").append(encoderData).toString()); //set headersEnumeration<String> headerNames=request.getHeaderNames(); while(headerNames.hasMoreElements()) {String headerName=headerNames.nextElement(); String headerValue=request.getHeader(headerName); get.setHeader(headerName, headerValue); }client=DeviceFactoryHttp.client;logger.info("开始调用http请求,请求url:"+urlBuffer.toString());HttpResponse rep=client.execute(get); returnResult=EntityUtils.toString(rep.getEntity(),"utf-8");logger.info("http 请求调用结束!!");return returnResult; }

先获取请求的参数,再将参数拼装在url后面,URLEncoder.encode 这个不要忘了,因为参数会有一些符号,需要对参数进行编码后再加入url,否则就会抛出异常,set headers:因为有部分信息服务端会从请求头中取出,所以我将客户端的请求头也set到服务端的request中,请求的url和请求的参数拼好就就可以client.exceute(get)执行请求了。

上面的是我浏览器直接将request请求作为参数传到我客户端,我所以我可以直接从request中获取url,有的是没有request,就需要从request的上下文环境中取了。

没有经过封装的:

首先从上下文中获取request的

public static HttpServletRequest getRequest(){  ServletRequestAttributes ra= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();  HttpServletRequest request = ra.getRequest();  return request; }

二:有了request后,就有了url,下面再来解析请求参数,因为这个参数是没有封装的,所以获取所有的请求参数

 public String centerToDeviceFacNoRequest(String key,String interfaceName)throws Exception { try {  HttpServletRequest request=getRequest();//上面第一步,从上下文中获取url  //获取reuquest请求参数  Enumeration<String> names= request.getParameterNames();  Map<String,String>paramMap=new HashMap<>();  //遍历请求map  while(names.hasMoreElements()) {   String name=names.nextElement();   String value=(String) request.getParameter(name);   paramMap.put(name, value);  }  //调用发送http请求的方法  return sendHttpToDevFacNoData(paramMap,request); } catch (Exception e) {  e.printStackTrace(); } //end return null; }

三:发送http请求

 public String sendHttpToDevFacNoData(Map<String,String>paramMap,HttpServletRequest request)throws Exception { HttpClient client = null; String result=""; StringBuffer dataBuffer=getUrlToRequest(request);//获取url dataBuffer.append("?"); client=DeviceFactoryHttp.client; Iterator<Entry<String, String>> paamIt=paramMap.entrySet().iterator(); while(paamIt.hasNext()) {  Entry<String, String> entry=paamIt.next();  dataBuffer.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } String resultUrl=dataBuffer.toString().substring(0, dataBuffer.toString().lastIndexOf("&")); //发送请求 HttpGet get=new HttpGet(resultUrl); //set headers Enumeration<String> headerNames=request.getHeaderNames(); while(headerNames.hasMoreElements()) {  String headerName=headerNames.nextElement();  String headerValue=request.getHeader(headerName);  get.setHeader(headerName, headerValue); } HttpResponse rep=client.execute(get); logger.info("开始调用http请求,请求url:"+resultUrl); //返回结果 result=EntityUtils.toString(rep.getEntity(),"utf-8"); logger.info(" http 请求调用结束!!"); return result; }

看完上述内容,你们对http请求怎么在spring boot中使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯