将一个服务器通过HTTP请求另一个服务器
时间:2023-08-26
本文章向大家介绍将一个服务器通过HTTP请求另一个服务器,主要内容包括1.一个服务器访问另一个服务器(不传参)、2.一个服务器访问另一个服务器(传参)、3.一个服务器访问另一个服务器(传对象)、4.一个服务器访问另一个服务器(MultipartFile文件传输)、使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.一个服务器访问另一个服务器(不传参)
@RequestMapping ("/test") public ResponseEntity<String> serverToServerRequest() { // 创建 RestTemplate 实例 RestTemplate restTemplate = new RestTemplate(); // 设置目标服务器的URL String targetUrl = "http://localhost:9172/file/test"; // 创建请求体 HttpEntity<String> requestEntity = new HttpEntity<>(null); // 发送 POST 请求给目标服务器,并获取响应 ResponseEntity<String> response = restTemplate.postForEntity(targetUrl, requestEntity, String.class); // 返回目标服务器的响应 return response; }
2.一个服务器访问另一个服务器(传参)
@RequestMapping ("/test") public ResponseEntity<String> serverToServerRequest() { // 创建 RestTemplate 实例 RestTemplate restTemplate = new RestTemplate(); Integer a = 5; // 设置目标服务器的URL String targetUrl = "http://localhost:9172/file/test1?a="+a; // 创建请求体 HttpEntity<String> requestEntity = new HttpEntity<>(null); // 发送 POST 请求给目标服务器,并获取响应 ResponseEntity<String> response = restTemplate.postForEntity(targetUrl, requestEntity, String.class); // 返回目标服务器的响应 return response; }
3.一个服务器访问另一个服务器(传对象)
@RequestMapping ("/test2") public ResponseEntity<String> serverToServerRequest2() { // 创建 RestTemplate 实例 RestTemplate restTemplate = new RestTemplate(); ClassEntity classEntity = new ClassEntity(); classEntity.setClassName("这是一个测试"); System.out.println(classEntity); // 设置目标服务器的URL String targetUrl = "http://localhost:9172/file/test2"; // 创建请求体 HttpEntity<ClassEntity> requestEntity = new HttpEntity<>(classEntity); // 发送 POST 请求给目标服务器,并获取响应 ResponseEntity<String> response = restTemplate.postForEntity(targetUrl, requestEntity, String.class); // 返回目标服务器的响应 return response; }
4.一个服务器访问另一个服务器(MultipartFile文件传输)
package com.dashan.controller; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.springframework.core.io.FileSystemResource; import org.springframework.http.*; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; @RestController @RequestMapping("test") public class FileUploadController { @PostMapping("/upload") public String uploadFile( MultipartFile file) throws IOException { // 创建临时文件 File tempFile = File.createTempFile("temp-", "-" + file.getOriginalFilename()); try (BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(tempFile))) { // 将接收到的文件内容写入临时文件 byte[] bytes = file.getBytes(); outputStream.write(bytes); }catch (IOException e){ //处理异常 } // 将临时文件传输给另一个服务器的接口 // 这里可以使用 HttpClient、RestTemplate 或其他 HTTP 客户端工具发送文件 // 示例使用 RestTemplate RestTemplate restTemplate = new RestTemplate(); String targetUrl = "http://localhost:9172/file/upload"; // 发送文件 MultiValueMap<String, Object> body = new LinkedMultiValueMap<>(); body.add("file", new FileSystemResource(tempFile)); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers); ResponseEntity<String> responseEntity = restTemplate.exchange(targetUrl, HttpMethod.POST, requestEntity, String.class); // 删除临时文件 Files.deleteIfExists(tempFile.toPath()); System.out.println( responseEntity.getBody()); JsonObject jsonObject = JsonParser.parseString(responseEntity.getBody()).getAsJsonObject(); String fieldValue = jsonObject.get("data").getAsString(); System.out.println(fieldValue); return responseEntity.getBody(); } }
在方法内部,首先创建一个临时文件,并将接收到的文件内容写入临时文件中。然后使用Java标准库中的HttpClient发送POST请求到另一个服务器的接口uploadUrl
,将临时文件作为请求的内容。最后根据另一个服务器返回的响应码判断文件是否成功传输,并返回相应的响应给客户端。
原文地址:https://www.cnblogs.com/xbinbin/p/17658470.html
- 左手用R右手Python系列16——XPath与网页解析库
- 扒一扒rvest的前世今生!
- RCurl中这么多get函数,是不是一直傻傻分不清!!!
- 机器学习(二)深度学习实战-使用Kera预测人物年龄问题描述引入所需要模块加载数据集创建模型编译模型优化optimize1 使用卷积神经网络optimize2 增加神经网络的层数输出结果结果
- 异步加载的基本逻辑与浏览器抓包一般流程
- 左手用R右手Python系列之——表格数据抓取之道
- XML/HTML/JSON——数据抓取过程中不得不知的几个概念
- R语言网络数据抓取的又一个难题,终于攻破了!
- R语言数据清洗实战——高效list解析方案
- 左手用R右手Python系列——循环中的错误异常规避
- SpringBoot2.x开发案例之整合Quartz任务管理系统
- 给出一组非负整数,重新排序组成最大的数
- [机智的机器在学习] TensorFlow实现Kmeans聚类
- [机智的机器在学习] 利用TensorFlow实现多元线性回归分类器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android中RecyclerView实现Item添加和删除的代码示例
- 小程序图片上传,存储,获取,显示(含源码)
- Android网络请求框架Retrofit详解
- Android控件RadioButton实现多选一功能
- 解决Android使用Handler造成内存泄露问题
- Android中imageView图片放大缩小及旋转功能示例代码
- Android 中 ThreadLocal使用示例
- Flutter基础widgets教程-Transform篇
- 借助云开发实现小程序模版消息推送(含源码)
- Android 监听软键盘状态的实例详解
- Android 中 ActivityLifecycleCallbacks的实例详解
- Android 优化Handler防止内存泄露
- Android Spinner 组件的应用实例
- Android编程实现扭曲图像的绘制功能示例
- 直播带货APP开发,圆形旋转动画