如何从 Spring Boot 控制器向另一台服务器执行 http 请求

com*_*man 9 spring http get-request

我想从托管在 localhost:8080 上的 Spring Boot 应用程序在 localhost:80 托管的服务器上执行 get 请求(例如,但可能是每个主机)。

例如,我想从我的 Spring 应用程序获取托管在 locahost:80/image.jpg 上的图像。我该如何处理这个问题?

Dra*_*iya 10

您可以通过两种方式发出第三方外部 api 请求。

  1. 休息模板

         RestTemplate restTemplate = new RestTemplate();
    
         String uri = localhost:80; // or any other uri
    
         HttpHeaders headers = new HttpHeaders();
         headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
         headers.add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
    
         HttpEntity<String> entity = new HttpEntity<>("parameters", headers);
         ResponseEntity<?> result =
                 restTemplate.exchange(uri, HttpMethod.GET, entity, returnClass);
         return result.getBody();
    
    Run Code Online (Sandbox Code Playgroud)

如果您想获取图像,请使用以下方法:

String url = "http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg";
byte[] imageBytes = restTemplate.getForObject(url, byte[].class);
Files.write(Paths.get("image.jpg"), imageBytes);
Run Code Online (Sandbox Code Playgroud)

您还需要在应用程序配置中配置 ByteArrayHttpMessageConverter:

@Bean
public RestTemplate restTemplate(List<HttpMessageConverter<?>> messageConverters) {
    return new RestTemplate(messageConverters);
}

@Bean
public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter() {
    return new ByteArrayHttpMessageConverter();
}
Run Code Online (Sandbox Code Playgroud)
  1. Unirest 在pom中添加unirest依赖:
<!-- Unirest java -->
    <dependency>
      <groupId>com.mashape.unirest</groupId>
      <artifactId>unirest-java</artifactId>
      <version>${unirest.java.version}</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

调用api的代码:

     RestTemplate restTemplate = new RestTemplate();

     String uri = localhost:80; // or any other uri

     HttpHeaders headers = new HttpHeaders();
     headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
     headers.add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");

     HttpEntity<String> entity = new HttpEntity<>("parameters", headers);
     ResponseEntity<?> result =
             restTemplate.exchange(uri, HttpMethod.GET, entity, returnClass);
     return result.getBody();
Run Code Online (Sandbox Code Playgroud)