From 157d06bf8d65de18a1f864fc438597fcba378844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9A=AE=E5=85=89=EF=BC=9A=E5=9F=8E=E4=B8=AD=E5=9F=8E?= <806783409@qq.com> Date: Mon, 15 Nov 2021 23:11:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=B8=8B=E8=BD=BD=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=EF=BC=8C=E8=BF=94=E5=9B=9E=E5=80=BC=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwaggerPoxyRequestController.java | 16 +++ .../service/SwaggerHttpRequestService.java | 100 +++++++++++------- .../src/views/apiRequest/ApiRequest.vue | 31 +++++- .../src/views/apiRequest/ApiRequestResult.vue | 2 + .../src/views/doc/docView/DocDebugger.vue | 73 +++++++++---- .../views/doc/docView/DocDebuggerResult.vue | 7 +- 6 files changed, 164 insertions(+), 65 deletions(-) diff --git a/zyplayer-doc-swagger-plus/src/main/java/com/zyplayer/doc/swaggerplus/controller/SwaggerPoxyRequestController.java b/zyplayer-doc-swagger-plus/src/main/java/com/zyplayer/doc/swaggerplus/controller/SwaggerPoxyRequestController.java index 46b14437..aae6c98b 100644 --- a/zyplayer-doc-swagger-plus/src/main/java/com/zyplayer/doc/swaggerplus/controller/SwaggerPoxyRequestController.java +++ b/zyplayer-doc-swagger-plus/src/main/java/com/zyplayer/doc/swaggerplus/controller/SwaggerPoxyRequestController.java @@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Objects; /** * 请求参数控制器 @@ -44,4 +46,18 @@ public class SwaggerPoxyRequestController { ProxyRequestResultVo requestResult = swaggerHttpRequestService.proxyRequest(request, requestParam); return DocResponseJson.ok(requestResult); } + + /** + * 代理接口下载请求 + * + * @return 请求参数 + * @author 暮光:城中城 + * @since 2021年10月16日 + */ + @ResponseBody + @PostMapping(value = "/download") + public ResponseJson download(HttpServletRequest request, HttpServletResponse response, ProxyRequestParam requestParam) { + swaggerHttpRequestService.proxyDownload(request, response, requestParam); + return DocResponseJson.ok(); + } } diff --git a/zyplayer-doc-swagger-plus/src/main/java/com/zyplayer/doc/swaggerplus/service/SwaggerHttpRequestService.java b/zyplayer-doc-swagger-plus/src/main/java/com/zyplayer/doc/swaggerplus/service/SwaggerHttpRequestService.java index b99551a9..0d3b1b6c 100644 --- a/zyplayer-doc-swagger-plus/src/main/java/com/zyplayer/doc/swaggerplus/service/SwaggerHttpRequestService.java +++ b/zyplayer-doc-swagger-plus/src/main/java/com/zyplayer/doc/swaggerplus/service/SwaggerHttpRequestService.java @@ -1,9 +1,8 @@ package com.zyplayer.doc.swaggerplus.service; -import cn.hutool.http.HttpRequest; -import cn.hutool.http.HttpResponse; -import cn.hutool.http.HttpUtil; -import cn.hutool.http.Method; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.http.*; import com.zyplayer.doc.core.exception.ConfirmException; import com.zyplayer.doc.data.repository.manage.entity.SwaggerGlobalParam; import com.zyplayer.doc.data.service.manage.SwaggerGlobalParamService; @@ -21,7 +20,9 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.net.HttpCookie; +import java.net.URLEncoder; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -66,6 +67,27 @@ public class SwaggerHttpRequestService { return resultStr; } + /** + * 执行代理请求 + * + * @author 暮光:城中城 + * @since 2021-11-04 + */ + public void proxyDownload(HttpServletRequest request, HttpServletResponse response, ProxyRequestParam requestParam) { + try { + HttpResponse httpResponse = this.getHttpResponse(request, requestParam); + Map> responseHeaders = httpResponse.headers(); + if (MapUtils.isNotEmpty(responseHeaders)) { + for (Map.Entry> httpHeader : responseHeaders.entrySet()) { + response.addHeader(httpHeader.getKey(), String.join(";", httpHeader.getValue())); + } + } + httpResponse.writeBody(response.getOutputStream(), true, null); + } catch (Exception e) { + e.printStackTrace(); + } + } + /** * 执行代理请求 * @@ -76,39 +98,7 @@ public class SwaggerHttpRequestService { ProxyRequestResultVo resultVo = new ProxyRequestResultVo(); long startTime = System.currentTimeMillis(); try { - // 执行请求 - Method method = requestMethodMap.get(requestParam.getMethod()); - if (method == null) { - throw new ConfirmException("不支持的请求方式:" + requestParam.getMethod()); - } - HttpRequest httpRequest = HttpUtil.createRequest(method, requestParam.getUrl()); - // header获取 - Map headerParam = new HashMap<>(); - requestParam.getHeaderParamData().forEach(item -> headerParam.put(item.getCode(), item.getValue())); - Map requestHeaders = this.getHttpHeader(request, headerParam); - if (StringUtils.isNotBlank(requestParam.getHost())) { - domainHeaderKeys.forEach(key -> requestHeaders.put(key, requestParam.getHost())); - requestHeaders.put("host", SwaggerDocUtil.getDomainHost(requestParam.getHost())); - } - // http自带参数 - httpRequest.addHeaders(requestHeaders); - // 用户输入的参数 - requestParam.getFormParamData().forEach(data -> httpRequest.form(data.getCode(), data.getValue())); - requestParam.getFormEncodeParamData().forEach(data -> httpRequest.form(data.getCode(), data.getValue())); - // cookie参数 - Map cookieParam = new HashMap<>(); - String headerCookie = headerParam.getOrDefault("Cookie", headerParam.get("cookie")); - requestParam.getCookieParamData().forEach(item -> cookieParam.put(item.getCode(), item.getValue())); - httpRequest.cookie(this.getHttpCookie(request, cookieParam, headerCookie)); - if (StringUtils.isNotBlank(requestParam.getBodyParam())) { - httpRequest.body(requestParam.getBodyParam()); - } - // 强制设置类型,貌似不用刻意设置,如果写的application/json,参数是表单,传过去收不到值,先注释这个 -// if (StringUtils.isNotBlank(requestParam.getContentType())) { -// httpRequest.contentType(requestParam.getContentType()); -// } - // 执行请求 - HttpResponse httpResponse = httpRequest.timeout(10000).execute(); + HttpResponse httpResponse = getHttpResponse(request, requestParam); resultVo.setData(httpResponse.body()); resultVo.setStatus(httpResponse.getStatus()); resultVo.setContentLength(httpResponse.bodyBytes().length); @@ -137,6 +127,42 @@ public class SwaggerHttpRequestService { return resultVo; } + private HttpResponse getHttpResponse(HttpServletRequest request, ProxyRequestParam requestParam){ + // 执行请求 + Method method = requestMethodMap.get(requestParam.getMethod()); + if (method == null) { + throw new ConfirmException("不支持的请求方式:" + requestParam.getMethod()); + } + HttpRequest httpRequest = HttpUtil.createRequest(method, requestParam.getUrl()); + // header获取 + Map headerParam = new HashMap<>(); + requestParam.getHeaderParamData().forEach(item -> headerParam.put(item.getCode(), item.getValue())); + Map requestHeaders = this.getHttpHeader(request, headerParam); + if (StringUtils.isNotBlank(requestParam.getHost())) { + domainHeaderKeys.forEach(key -> requestHeaders.put(key, requestParam.getHost())); + requestHeaders.put("host", SwaggerDocUtil.getDomainHost(requestParam.getHost())); + } + // http自带参数 + httpRequest.addHeaders(requestHeaders); + // 用户输入的参数 + requestParam.getFormParamData().forEach(data -> httpRequest.form(data.getCode(), data.getValue())); + requestParam.getFormEncodeParamData().forEach(data -> httpRequest.form(data.getCode(), data.getValue())); + // cookie参数 + Map cookieParam = new HashMap<>(); + String headerCookie = headerParam.getOrDefault("Cookie", headerParam.get("cookie")); + requestParam.getCookieParamData().forEach(item -> cookieParam.put(item.getCode(), item.getValue())); + httpRequest.cookie(this.getHttpCookie(request, cookieParam, headerCookie)); + if (StringUtils.isNotBlank(requestParam.getBodyParam())) { + httpRequest.body(requestParam.getBodyParam()); + } + // 强制设置类型,貌似不用刻意设置,如果写的application/json,参数是表单,传过去收不到值,先注释这个 +// if (StringUtils.isNotBlank(requestParam.getContentType())) { +// httpRequest.contentType(requestParam.getContentType()); +// } + // 执行请求 + return httpRequest.timeout(10000).execute(); + } + /** * 获取http的cookie * diff --git a/zyplayer-doc-ui/swagger-ui/src/views/apiRequest/ApiRequest.vue b/zyplayer-doc-ui/swagger-ui/src/views/apiRequest/ApiRequest.vue index 42888d3b..711697f2 100644 --- a/zyplayer-doc-ui/swagger-ui/src/views/apiRequest/ApiRequest.vue +++ b/zyplayer-doc-ui/swagger-ui/src/views/apiRequest/ApiRequest.vue @@ -1,6 +1,6 @@