springboot做转发

303 阅读1分钟

实现过程

  1. 获取请求地址
  2. 获取请求头
  3. 获取请求header
  4. 创建请求
  5. 执行请求
  6. 复制返回流
  7. 进行返回
private void httpProxy(HttpServletResponse response, String url,String methodName ) throws IOException {  

  //设置请求方式
    HttpMethod httpMethod = HttpMethod.resolve(methodName);  
    if(httpMethod == null) {  
        return;  
    }
    //创建请求
    ClientHttpRequest delegate = new SimpleClientHttpRequestFactory().createRequest(URI.create(url), httpMethod);  
    // Enumeration<String> headerNames = request.getHeaderNames();  
    // // 设置请求头  
    // while (headerNames.hasMoreElements()) {  
    // String headerName = headerNames.nextElement();  
    // Enumeration<String> v = request.getHeaders(headerName);  
    // List<String> arr = new ArrayList<>();  
    // while (v.hasMoreElements()) {  
    // arr.add(v.nextElement());  
    // }  
    // delegate.getHeaders().addAll(headerName, arr);  
    // }  
    // StreamUtils.copy(request.getInputStream(), delegate.getBody());  
    // 执行调用  
    ClientHttpResponse clientHttpResponse = delegate.execute();  
    response.setStatus(clientHttpResponse.getStatusCode().value());  
    // 设置响应头  
    clientHttpResponse.getHeaders().forEach((key, value) -> value.forEach(it -> response.setHeader(key, it)));
    //复制流进行返回
    StreamUtils.copy(clientHttpResponse.getBody(), response.getOutputStream());  
}