首页 > 其他分享 >将一个服务器通过HTTP请求另一个服务器

将一个服务器通过HTTP请求另一个服务器

时间:2023-08-26 11:22:21浏览次数:38  
标签:HTTP 请求 RestTemplate new file import 服务器 String

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,将临时文件作为请求的内容。最后根据另一个服务器返回的响应码判断文件是否成功传输,并返回相应的响应给客户端。

 

标签:HTTP,请求,RestTemplate,new,file,import,服务器,String
From: https://www.cnblogs.com/xbinbin/p/17658470.html

相关文章

  • 玩转 PI 系列-看起来像服务器的 ARM 开发板矩阵-Firefly Cluster Server
    前言基于我个人的工作内容和兴趣,想要在家里搞一套服务器集群,用于容器/K8s等方案的测试验证。考虑过使用二手服务器,比如DellR730,还搞了一套配置清单,如下:DellR7303.5尺寸规格硬盘CPU:2686v4*2内存:16g*8存储:480Gintelssd系统盘+6tsas希捷*2个数据盘RAID卡:h73......
  • 在公网服务器进行“肾透”
    在实际操作中,我们的kali都是安装在虚拟机或者物理机、树莓派中。虽然用起来比较方便,但是网络只有运维商分配的网络IP。在很多情况下我们需要公网IP,一般都是通过frpngrp内网映射实现的。那么有没有更加简单的方法呢?安装docker这里我们需要购买一台VPS,笔者用的是阿里的轻量服务器。......
  • 玩转 PI 系列-看起来像服务器的 ARM 开发板矩阵-Firefly Cluster Server
    前言基于我个人的工作内容和兴趣,想要在家里搞一套服务器集群,用于容器/K8s等方案的测试验证。考虑过使用二手服务器,比如DellR730,还搞了一套配置清单,如下:DellR7303.5尺寸规格硬盘CPU:2686v4*2内存:16g*8存储:480Gintelssd系统盘+6tsas希捷*2个数据盘RAID卡:h7......
  • 免费云服务器分享,三丰老牌云服务商
    分享一波福利,最近找到了一款免费的云服务器,三丰.云,免费云服务器,免费虚拟主机用了一段时间,做做测试,做做网站的绰绰有余,今天分享给大家需要的自取 https://www.sanfengyun.com ......
  • 使用哪种注解处理后台Map参数类型,探究前端发送请求URL限制
    如何处理接口参数是Map类型探究URL限制法1:前端发送Get请求需求:为了得到分页结果,我将分页时需要的参数封装到Map中进行传递@GetMapping("/page")publicRqueryPage(@RequestParamMap<String,Object>params){}//1.测试GEThttp://localhost:8080/product/categorybrandrel......
  • 基于亚马逊云科技无服务器服务快速搭建电商平台——部署篇
    受疫情影响消费者习惯发生改变,刺激了全球电商行业的快速发展。除了依托第三方电商平台将产品销售给消费者之外,企业通过品牌官网或者自有电商平台销售商品也是近几年电商领域快速发展的商业模式。独立站电商模式可以进行多方面、全渠道的互联网市场拓展,推广所带来的流量、品牌印象......
  • HTTP
    一、概念超文本传输协议:一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。状态码:常见字段:1、host字段:服务器的域名 2、Content-Length 字段:本次回应的数据长度 3、Connection 字段:设置长连接,开启了HTTPKee......
  • java项目流程(获取http信息头)
    1.创建一个项目2.创建一个类找不到HttpServlet这个父类时,安装tomcat(Eclipse集成Tomcat)  然后导入Servlet-api.jar包,重新导入即可。在需要导入的工程上右键进入properties-->Javabuildpath,library选项卡中选择Addexternaljars,选择你所安装tomcat目录下lib文件中的S......
  • 网络请求-Android篇(Okhttp和Retrofit)
    一.OkHttp的介绍和基本用法OkHttp是一个流行的开源Java和Android应用程序的HTTP客户端。它由SquareInc.开发,提供了一种简单高效的方式来进行应用程序中的HTTP请求。要在Java或Android项目中使用OkHttp,您需要将OkHttp依赖项添加到您的build.gradle文件中。然后,您可以创建一个......
  • Linux系统:第十章:服务器环境搭建
    将防火墙关闭并设置为开机不自动启动:systemctlstopfirewalld.servicesystemctldisablefirewalld.serviceLinux系统中JDK的安装与配置进入opt目录下:cd/opt在opt目录下上传jdk文件:jdk-8u152-linux-x64.tar.gz解压:tar-zxvfjdk-8u152-linux-x64.tar.gz进入etc目录下:cd......