Commit 4cb23962 by 王祖波

透传request和response请求头

parent b1b55f0a
......@@ -7,18 +7,10 @@ import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.Map.Entry;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.NameValuePair;
import org.apache.http.*;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
......@@ -26,6 +18,7 @@ import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.conn.params.ConnPerRouteBean;
......@@ -53,6 +46,9 @@ import org.apache.logging.log4j.Logger;
import com.alibaba.fastjson.JSON;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HttpClient {
private static Logger logger = LogManager.getLogger(HttpClient.class);
......@@ -98,11 +94,11 @@ public class HttpClient {
return mHttpClient;
}
public static Map<String, Object> getWinxinResByJson(String url, String jsonStr, byte[] b) {
return getWinxinResByJson(url, jsonStr, null,b);
public static Map<String, Object> getWinxinResByJson(String url, String jsonStr, byte[] b, HttpServletRequest request, HttpServletResponse response) {
return getWinxinResByJson(url, jsonStr, null,b,request,response);
}
public static Map<String, Object> getWinxinResByJson(String url, String jsonStr, Map<String, String> header , byte[] b) {
public static Map<String, Object> getWinxinResByJson(String url, String jsonStr, Map<String, String> header , byte[] b,HttpServletRequest request, HttpServletResponse response) {
long begin = new Date().getTime();
String resInfo = null;
......@@ -118,15 +114,18 @@ public class HttpClient {
}
}
doRequestHeader(post,request);
try {
if (null != jsonStr) {
post.setEntity(new StringEntity(jsonStr, "utf-8"));
}
HttpResponse response = client.execute(post);
resInfo = EntityUtils.toString(response.getEntity(), "utf-8");
HttpResponse httpResponse = client.execute(post);
resInfo = EntityUtils.toString(httpResponse.getEntity(), "utf-8");
weixinMap = JSON.parseObject(resInfo, Map.class);
doResponseHeader(httpResponse, response);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
......@@ -143,7 +142,7 @@ public class HttpClient {
return weixinMap;
}
public static Map<String, Object> getWinxinResByFile(String url, Map<String, ContentBody> map , byte[] b) {
public static Map<String, Object> getWinxinResByFile(String url, Map<String, ContentBody> map , byte[] b,HttpServletRequest request, HttpServletResponse response) {
long begin = new Date().getTime();
String entityStr = null;
......@@ -160,12 +159,14 @@ public class HttpClient {
HttpPost post = new HttpPost(url);
StringBuilder builder = new StringBuilder();
doRequestHeader(post,request);
try {
post.setEntity(entity);
HttpResponse response = client.execute(post);
entityStr = EntityUtils.toString(response.getEntity(), "utf-8");
HttpResponse httpResponse = client.execute(post);
entityStr = EntityUtils.toString(httpResponse.getEntity(), "utf-8");
obj = JSON.parseObject(entityStr, Map.class);
doResponseHeader(httpResponse, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
......@@ -177,7 +178,7 @@ public class HttpClient {
return obj;
}
public static Map<String, Object> getHttpByGet(String url, String userName, String password , byte[] b) {
public static Map<String, Object> getHttpByGet(String url, String userName, String password , byte[] b,HttpServletRequest request, HttpServletResponse response) {
Map<String, Object> map = new HashMap<String, Object>();
org.apache.http.client.HttpClient client = getHttpClient();
setIp(client,b) ;
......@@ -189,18 +190,19 @@ public class HttpClient {
}
HttpGet get = new HttpGet(url);
get.setHeader("Authorization", "Basic YWRtaW46YWRtaW4=");
HttpResponse response = null;
doRequestHeader(get,request);
HttpResponse httpResponse = null;
try {
response = client.execute(get);
map = doResponse(response);
httpResponse = client.execute(get);
map = doResponse(httpResponse,response);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (response != null) {
if (httpResponse != null) {
try {
response.getEntity().getContent().close();
httpResponse.getEntity().getContent().close();
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
......@@ -210,11 +212,36 @@ public class HttpClient {
}
public static Map<String, Object> getHttpByGet(String url , byte[] b) {
return getHttpByGet(url, null, null , b);
public static Map<String, Object> getHttpByGet(String url , byte[] b,HttpServletRequest request, HttpServletResponse response) {
return getHttpByGet(url, null, null , b,request,response);
}
private static Map<String, Object> doResponse(HttpResponse response) {
private static void doRequestHeader(HttpRequestBase httpRequestBase, HttpServletRequest request) {
// 获取所有请求头的名称列表
Enumeration<String> headerNames = request.getHeaderNames();
// 遍历请求头名称列表
while (headerNames!=null && headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
// 根据名称获取具体的请求头值
String headerValue = request.getHeader(headerName);
httpRequestBase.setHeader(headerName,headerValue);
}
}
private static void doResponseHeader(HttpResponse httpResponse, HttpServletResponse response) {
// 获取响应头
Header[] headers = httpResponse.getAllHeaders();
// 将响应头信息添加到HttpServletResponse对象中
for (Header header : headers) {
response.addHeader(header.getName(), header.getValue());
}
}
private static Map<String, Object> doResponse(HttpResponse httpResponse,HttpServletResponse response) {
Map<String, Object> map = new HashMap<String, Object>();
String line = "";
String result = null;
......@@ -222,13 +249,15 @@ public class HttpClient {
int responseCode = 0;
try {
HttpEntity entity = response.getEntity();
HttpEntity entity = httpResponse.getEntity();
BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"), 8 * 1024);
StringBuilder builder = new StringBuilder();
responseCode = response.getStatusLine().getStatusCode();
responseCode = httpResponse.getStatusLine().getStatusCode();
doResponseHeader(httpResponse, response);
switch (responseCode) {
// 请求成功
......
......@@ -6,6 +6,7 @@ import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.content.ByteArrayBody;
......@@ -26,43 +27,43 @@ public class QywxController {
private static final Logger logger = LoggerFactory.getLogger(QywxController.class);
@RequestMapping("self-post")
public Object selfPost(HttpServletRequest request,String url, String json, String ip) {
public Object selfPost(HttpServletRequest request, HttpServletResponse response, String url, String json, String ip) {
String traceid=request.getParameter("tranceid") ;
logger.info("自建post,url={},json={},{}", url, json,traceid);
Map<String, Object> map = HttpClient.getWinxinResByJson(url, json, getIp(ip));
Map<String, Object> map = HttpClient.getWinxinResByJson(url, json, getIp(ip),request,response);
return map;
}
@RequestMapping("self-post-json")
public Object selfPostJson(HttpServletRequest request,String url, @RequestBody String json, String ip) {
public Object selfPostJson(HttpServletRequest request,HttpServletResponse response,String url, @RequestBody String json, String ip) {
String traceid=request.getParameter("tranceid") ;
logger.info("自建post json,url={},json={},{}", url, json,traceid);
Map<String, Object> map = HttpClient.getWinxinResByJson(url, json, getIp(ip));
Map<String, Object> map = HttpClient.getWinxinResByJson(url, json, getIp(ip),request,response);
return map;
}
@RequestMapping("self-get")
public Object selfGet(HttpServletRequest request,String url, String ip) {
public Object selfGet(HttpServletRequest request,HttpServletResponse response,String url, String ip) {
String traceid=request.getParameter("tranceid") ;
logger.info("自建get,url={},{}", url,traceid);
Map<String, Object> map = HttpClient.getHttpByGet(url, getIp(ip));
Map<String, Object> map = HttpClient.getHttpByGet(url, getIp(ip),request,response);
return map;
}
@RequestMapping("self-upload")
public Object selfUpload(HttpServletRequest request,String url, String fileUrl, String fileName, String ip) {
public Object selfUpload(HttpServletRequest request,HttpServletResponse response,String url, String fileUrl, String fileName, String ip) {
String traceid=request.getParameter("tranceid") ;
logger.info("自建upload,url={},fileUrl={},{}", url,fileUrl,traceid);
byte[] data = CommonUtil.getFileByte(fileUrl);
Map<String, ContentBody> paramsMap = new HashMap<String, ContentBody>();
paramsMap.put("media", new ByteArrayBody(data, ContentType.DEFAULT_BINARY, fileName));
Map<String, Object> map = HttpClient.getWinxinResByFile(url, paramsMap, getIp(ip));
Map<String, Object> map = HttpClient.getWinxinResByFile(url, paramsMap, getIp(ip),request,response);
logger.info("自建upload end={}",traceid);
return map;
}
@RequestMapping("self-upload-data")
public Object selfImage(HttpServletRequest request,String url, String fileName, String ip) throws IOException {
public Object selfImage(HttpServletRequest request,HttpServletResponse response,String url, String fileName, String ip) throws IOException {
String traceid=request.getParameter("tranceid") ;
logger.info("自建upload-data,url={},{}", url,traceid);
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
......@@ -71,7 +72,7 @@ public class QywxController {
byte[] data = mf.getBytes();
Map<String, ContentBody> paramsMap = new HashMap<String, ContentBody>();
paramsMap.put("media", new ByteArrayBody(data, ContentType.DEFAULT_BINARY, fileName));
Map<String, Object> map = HttpClient.getWinxinResByFile(url, paramsMap, getIp(ip));
Map<String, Object> map = HttpClient.getWinxinResByFile(url, paramsMap, getIp(ip),request,response);
logger.info("自建upload-data end={}",traceid);
return map;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment