You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
5.0 KiB
98 lines
5.0 KiB
package com.fr.plugin.zk.zheneng.proxy.xx; |
|
|
|
import com.cloud.apigateway.sdk.utils.Client; |
|
import com.cloud.apigateway.sdk.utils.Request; |
|
import com.fr.decision.webservice.Response; |
|
import com.fr.general.IOUtils; |
|
import com.fr.log.FineLoggerFactory; |
|
import com.fr.plugin.zk.zheneng.proxy.config.ApiProxyConfig; |
|
import com.fr.stable.StringUtils; |
|
import com.fr.third.fasterxml.jackson.databind.ObjectMapper; |
|
import com.fr.web.utils.WebUtils; |
|
import okhttp3.Headers; |
|
import okhttp3.OkHttpClient; |
|
import okhttp3.ResponseBody; |
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
import javax.servlet.http.HttpServletResponse; |
|
import java.util.Enumeration; |
|
import java.util.UUID; |
|
|
|
public class xxAppRequest { |
|
private static final ObjectMapper objectMapper = new ObjectMapper(); |
|
|
|
public static void action(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { |
|
String url = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyUrl"); |
|
String requestType = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyRequestType"); |
|
// String contentType = WebUtils.getHTTPRequestParameter(httpServletRequest, "proxyContentType"); |
|
if (StringUtils.isBlank(url) && StringUtils.isBlank(requestType)) { |
|
WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求中 URL 和请求类型不应为空"))); |
|
return; |
|
} |
|
if (url.contains("public/com.fr.plugin.zk.zheneng.proxy/proxy/xx") || url.contains("url/proxy/xx")) { |
|
WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求中 URL 不能代理为自己"))); |
|
return; |
|
} |
|
Request request = new Request(); |
|
try { |
|
//key和secret, 为访问API所属的APP的key和secret |
|
request.setKey(ApiProxyConfig.getInstance().getAppKey()); |
|
request.setSecret(ApiProxyConfig.getInstance().getAppSecret()); |
|
//接口访问类型 |
|
request.setMethod(requestType); |
|
//接口访问url |
|
request.setUrl(url); |
|
//API中 header头传输的参数 |
|
request.addHeader("x-api-id", UUID.randomUUID().toString().replace("-", "")); |
|
request.addHeader("Content-Type", "application/json"); |
|
//API中 Query传输的参数 |
|
// request.addQueryStringParam("name", "value"); |
|
Enumeration<String> enumeration = httpServletRequest.getHeaderNames(); |
|
while (enumeration.hasMoreElements()) { |
|
String headerName = enumeration.nextElement(); |
|
String headerValue = httpServletRequest.getHeader(headerName); |
|
request.addHeader(headerName, headerValue); |
|
} |
|
//API中 Body体参数 |
|
if ("POST".equals(requestType)) { |
|
String bodyData = IOUtils.inputStream2String(httpServletRequest.getInputStream()); |
|
System.out.println(bodyData); |
|
request.setBody(bodyData); |
|
} |
|
} catch (Exception e) { |
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("400", "请求参数错误 " + e.getMessage()))); |
|
return; |
|
} |
|
|
|
try { |
|
//Sign the request. |
|
okhttp3.Request signedRequest = Client.signOkhttp(request); |
|
String authorization = signedRequest.header("Authorization"); |
|
signedRequest = signedRequest.newBuilder().addHeader("x-Authorization", authorization).build(); |
|
//Send the request. |
|
long startDate = System.currentTimeMillis(); |
|
FineLoggerFactory.getLogger().info("Api request start with {}", url); |
|
OkHttpClient client = new OkHttpClient.Builder().build(); |
|
okhttp3.Response response = client.newCall(signedRequest).execute(); |
|
//Print the status line of the response. |
|
FineLoggerFactory.getLogger().info("Api request end with {} use {}", url, (System.currentTimeMillis() - startDate), String.valueOf(response.code())); |
|
//Print the header fields of the response. |
|
Headers resHeaders = response.headers(); |
|
for (String h : resHeaders.names()) { |
|
httpServletResponse.addHeader(h, resHeaders.get(h)); |
|
} |
|
//Print the body of the response. |
|
ResponseBody resEntity = response.body(); |
|
if (resEntity != null) { |
|
String data = resEntity.string(); |
|
FineLoggerFactory.getLogger().debug("Api request end with {} and data is", url, resEntity); |
|
WebUtils.printAsString(httpServletResponse, data); |
|
} |
|
} catch (Exception e) { |
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
WebUtils.printAsString(httpServletResponse, objectMapper.writeValueAsString(Response.error("500", request.getUrl() + " 请求错误 " + e.getMessage()))); |
|
} |
|
} |
|
|
|
}
|
|
|