Spring Boot实现该命令的HTTP选项头文件中带有凭据的方式

问题描述:

我是Spring Boot的新手,但我之前在HTTP OPTIONS命令中使用过Java。Spring Boot实现该命令的HTTP选项头文件中带有凭据的方式

我在构建一个服务方法,它接受一个URL并使用HTTP OPTIONS命令测试该URL。

下面是我自己编写使用Java:

import java.net.HttpURLConnection; 
import java.net.URL; 

    ... 

public String testConnection(URL url) { 
    try { 
       String type = "text/plain;charset=UTF-8"; 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

       conn.setDoOutput(true); 
       conn.setRequestMethod("OPTIONS"); 
       conn.setRequestProperty("Content-Type", type); 

       System.out.println(String.format("HTTP %d: %s", 
        conn.getResponseCode(), conn.getResponseMessage())); 

       for(String header : conn.getHeaderFields().keySet()){ 
       System.out.println(String.format("%s : %s", 
         header, conn.getHeaderFields().get(header))); 
       } 

       String rMessage = conn.getResponseMessage(); 
       System.out.println ("Response " + rMessage); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
} 

是否有执行HTTP OPTIONS请求的弹簧引导等价的方式?如果是这样,我还可以在请求中添加凭证(用户名和密码)到头部吗?谢谢。

您可以使用Spring Boot的RestTemplate

import org.springframework.http.HttpEntity; 
import org.springframework.http.HttpHeaders; 
import org.springframework.http.HttpMethod; 
import org.springframework.http.ResponseEntity; 

// skipping class definition here, just showing the method call 

private void optionsCall() { 
    final String url = "https://some.server/with/some/path"; 
    final String user = "theUser"; 
    final String password = "thePassword"; 

    final String authHeaderValue = "Basic " + Base64.getEncoder() 
      .encodeToString((user + ':' + password).getBytes()); 

    final HttpHeaders requestHeaders = new HttpHeaders(); 
    requestHeaders.set("Authorization", authHeaderValue); 

    RestTemplate rest = new RestTemplate(); 
    final ResponseEntity<Object> optionsResponse = 
      rest.exchange(url, HttpMethod.OPTIONS, 
        new HttpEntity<>(requestHeaders), 
        Object.class); 

    optionsResponse.getHeaders().forEach((key, value) -> log.info("{} -> {}", key, value)); 
} 

我使用Object这里为响应身型,通常一个OPTION请求没有返回的东西,但它并不禁止这样做,和exchange方法想要在那里上课。我使用slf4j Logger记录返回的头文件。使用https和基本身份验证对服务进行测试。