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

package com.fr.plugin.xx.zheneng.proxy.huawei;
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.xx.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 HuaweiAppRequest {
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.xx.zheneng.proxy/proxy/huawei") || url.contains("url/proxy/huawei")) {
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())));
}
}
}