当前位置: 首页 > news >正文

使用RestTemplate发送与接收http/https请求

一、什么是httpHTTP(‌超文本传输协议‌)是互联网上应用最广泛的‌应用层协议‌,用于在客户端(通常是浏览器)和服务器之间‌传输超文本(如网页)及其他资源‌(如图片、视频、文件等)。它是万维网(WWW)数据通信的基础。

1、首先我们需要导入依赖,请确保你的服务有Spring Web依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

pringboot提供两种实例RestTemplate方式,一种是注解依赖,另一种直接new即可

private final RestTemplate restTemplate;
或者
RestTemplate restTemplate =new RestTemplate();

2、 如何发送GET请求因get请求不推荐也不允许将入参放入body体中,并且对url长度有所限制,适合简单请求发送

普通GET请求:

// 普通GET请求
String url = "https://api.example.com/data";
String result = restTemplate.getForObject(url, String.class);
System.out.println("响应内容: " + result);

携带响应头与响应状态码的get请求:

// 携带响应头与响应状态码的get请求
String url = "https://api.example.com/data";
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
HttpStatus statusCode = response.getStatusCode(); // 获取状态码
HttpHeaders headers = response.getHeaders();      // 获取响应头
String body = response.getBody();                 // 获取响应体
System.out.println("获取响应状态码: " + statusCode.toString());
System.out.println("获取响应头: " + headers.toString());
System.out.println("获取响应体: " + body);

携带参数的get请求:

// 携带参数的get请求
String url = "https://api.example.com/data?key1="+"我是key1的值"+"&"+"key2="+"我是key2的值";
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
HttpStatus statusCode = response.getStatusCode(); // 获取状态码
HttpHeaders headers = response.getHeaders();      // 获取响应头
String body = response.getBody();                 // 获取响应体
System.out.println("获取响应状态码: " + statusCode.toString());
System.out.println("获取响应头: " + headers.toString());
System.out.println("获取响应体: " + body);

携带请求头的get请求:

// 携带请求头的get请求
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Bearer token123"); // 添加请求头
HttpEntity<String> requestEntity = new HttpEntity<>(headers);
String url = "https://api.example.com/data?key1="+"我是key1的值"+"&"+"key2="+"我是key2的值";
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);
HttpStatus statusCode = response.getStatusCode(); // 获取状态码
HttpHeaders resHeaders = response.getHeaders();      // 获取响应头
String body = response.getBody();                 // 获取响应体
System.out.println("获取响应状态码: " + statusCode.toString());
System.out.println("获取响应头: " + resHeaders.toString());
System.out.println("获取响应体: " + body);

3、 如何发送POST请求如遇文件或大量敏感数据,或服务端有要求的,需要使用post请求方式
简单POST请求:

// 简单POST请求
String url = "https://api.example.com/data";
String result = restTemplate.postForObject(url, null, String.class);
System.out.println("响应内容: " + result);

携带响应头与响应状态码的POST请求:

// 携带响应头与响应状态码的POST请求
String url = "https://api.example.com/data";
ResponseEntity<String> response = restTemplate.postForEntity(url, null, String.class);
HttpStatus statusCode = response.getStatusCode(); // 获取状态码
HttpHeaders headers = response.getHeaders();      // 获取响应头
String body = response.getBody();                 // 获取响应体
System.out.println("获取响应状态码: " + statusCode.toString());
System.out.println("获取响应头: " + headers.toString());
System.out.println("获取响应体: " + body);

发送表单数据:

// 发送表单数据
String url = "https://api.example.com/data";
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
arams.add("username", "admin");
params.add("password", "123456");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity requestEntity = new HttpEntity(params, headers);
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
HttpStatus statusCode = response.getStatusCode(); // 获取状态码
HttpHeaders responseHeaders = response.getHeaders(); // 获取响应头
String body = response.getBody();                 // 获取响应体
System.out.println("获取响应状态码: " + statusCode.toString());
System.out.println("获取响应头: " + responseHeaders.toString());
System.out.println("获取响应体: " + body);

发送JSON数据:

// 发送JSON数据
String url = "https://api.example.com/data";
Map<String, Object> map = new HashMap<>();
map.put("username", "admin");
map.put("password", "123456");
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity httpEntity = new HttpEntity(map, httpHeaders);
ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
HttpStatus statusCode = response.getStatusCode(); // 获取状态码
HttpHeaders responseHeaders = response.getHeaders(); // 获取响应头
String body = response.getBody();                 // 获取响应体
System.out.println("获取响应状态码: " + statusCode.toString());
System.out.println("获取响应头: " + responseHeaders.toString());
System.out.println("获取响应体: " + body);

发送文件:

// 发送文件
String url = "https://api.example.com/data";
HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.MULTIPART_FORM_DATA);
Resource fileResource = new FileSystemResource("/path/to/file.txt");
MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>();
multiValueMap.add("file", fileResource);
multiValueMap.add("comment", "测试文件上传");
HttpEntity httpEntity = new HttpEntity(multiValueMap, headers);
ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
HttpStatus statusCode = response.getStatusCode(); // 获取状态码
HttpHeaders responseHeaders = response.getHeaders();      // 获取响应头
String body = response.getBody();                 // 获取响应体
System.out.println("获取响应状态码: " + statusCode.toString());
System.out.println("获取响应头: " + responseHeaders.toString());
System.out.println("获取响应体: " + body);

4、 如何发送其他请求其他请求在get中大家也看到,可以采用exchange方式来实现

// 类似如下
Map<String, String> requestParam = new HashMap<>();
requestParam.put("admin", "123456");
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity requestEntity = new HttpEntity(requestParam, httpHeaders);
String url = "https://api.example.com/data";
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.PUT, requestEntity, String.class);
HttpStatus statusCode = response.getStatusCode(); // 获取状态码
HttpHeaders resHeaders = response.getHeaders();      // 获取响应头
String body = response.getBody();                 // 获取响应体
System.out.println("获取响应状态码: " + statusCode.toString());
System.out.println("获取响应头: " + resHeaders.toString());
System.out.println("获取响应体: " + body);

5、 如何发送Https请求在发送https请求时如果服务端SSL证书有误或其他原因,会导致发送不成功无效证书的情况,解决办法也很简单,我们只需要忽略它的证书即可!
增加配置类:

import org.apache.http.conn.ssl.*;
import org.apache.http.impl.client.*;
import org.springframework.http.client.*;
import org.springframework.web.client.RestTemplate;
import javax.net.ssl.*;public class SSLConfig {public static RestTemplate getUnsafeRestTemplate() throws Exception {SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, (chain, authType) -> true).build();CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).setSSLContext(sslContext).build();return new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient));}
}
然后创建实例对象:RestTemplate restTemplate = SSLConfig.getUnsafeRestTemplate();
http://www.dtcms.com/a/319807.html

相关文章:

  • 告别YAML,在SpringBoot中用数据库配置替代配置文件
  • 【JS】扁平树数据转为树结构
  • [激光原理与应用-172]:测量仪器 - 能量(焦耳)与功率(瓦)的图示比较
  • 14-netty基础-手写rpc-提供方(服务端)-06
  • Java NIO 核心原理与秋招高频面试题解析
  • day28-NFS
  • iOS混淆工具使用,后续维护与版本升级中实用的混淆策略
  • 代码随想录day58图论8
  • windows操作系统定时关机、重启指令记录
  • 一周学会Matplotlib3 Python 数据可视化-坐标轴 (Axis)
  • 进程间数据的关联与隔离
  • 管家婆软件如何设置默认税率?
  • AI创新中心从“空间集聚”到“生态共生”
  • 代码库详细笔记
  • P1690 贪婪的 Copy
  • [airplay2] airplay2简略介绍
  • 前端全局注册知识【持续更新】
  • 二分查找算法,并分析其时间、空间复杂度
  • IIS7.5下的https无法绑定主机头,显示灰色如何处理?
  • [ java SE ] 多人聊天窗口1.0
  • 强光干扰下裂缝漏检率↓82%!陌讯轻量化模型在道路巡检的落地实践
  • 2深度学习Pytorch-自动微分--梯度计算、梯度上下文控制(累计梯度、梯度清零)
  • Ethereum: 像Uniswap V3贡献者一样开发,克隆、编译与测试v3-core
  • 通过减少回表和增加冗余字段,优化SQL查询效率
  • LSTM 单变量时序预测—pytorch
  • vscode+latex本地英文期刊环境配置
  • VScode使用jupyter notebook,配置内核报错没有torch解决
  • 如何委托第三方检测机构做软件测试?
  • 鸿蒙 - 分享功能
  • 直播预告|鸿蒙生态下的 Flutter 开发实战