部署tomcat代理获取数据

安装jdk
安装tomcat
部署到tomcat的webapps目录下
<%``@page session=``"false" %>
<%``@page import``="java.io.*,
java.net.HttpURLConnection,
java.net.URL,
java.net.URLDecoder,
java.net.URLEncoder,
java.nio.charset.Charset,
java.text.SimpleDateFormat,
java.util.*,
java.util.logging.FileHandler,
java.util.logging.Level,
java.util.logging.Logger,
java.util.logging.SimpleFormatter" %>
`<%!finalString version = "1.0 SNAPSHOT"; %><%!privateString PROXY_REFERER = "[http://ip:port1/proxy/restProxy.jsp"](http://ip:port1/proxy/restProxy.jsp);privateString REST_SERVER_BASE = "[http://ip:port/context"];privatebyte[] readRequestPostBody(HttpServletRequest request)throwsIOException {intclength = request.getContentLength();if(clength > 0) {byte[] bytes =newbyte[clength];` `DataInputStream dataIs =newDataInputStream(request.getInputStream());dataIs.readFully(bytes);dataIs.close();returnbytes;}returnnewbyte[0``];}`

private HttpURLConnection forwardToServer(HttpServletRequest request, String httpMethod, String uri, ``byte``[] postBody) ``throws IOException {

return doHTTPRequest(uri, postBody, httpMethod, request.getHeader(``"Referer"``), ``"application/json"``);

}

private String webResponseToString(InputStream in) ``throws IOException{

Reader reader = ``new BufferedReader(``new InputStreamReader(in,``"UTF-8"``));

StringBuffer content = ``new StringBuffer();

char``[] buffer = ``new char``[``5000``];

int n;

while ( ( n = reader.read(buffer)) != -``1 ) {

content.append(buffer,``0``,n);

}

reader.close();

String strResponse = content.toString();

return strResponse;

}

private boolean fetchAndPassBackToClient(HttpURLConnection con, HttpServletResponse clientResponse, ``boolean ignoreAuthenticationErrors) ``throws IOException {

if (con != ``null``) {

Map<String, List<String>> headerFields = con.getHeaderFields();

Set<String> headerFieldsSet = headerFields.keySet();

Iterator<String> hearerFieldsIter = headerFieldsSet.iterator();

while (hearerFieldsIter.hasNext()) {

String headerFieldKey = hearerFieldsIter.next();

List<String> headerFieldValue = headerFields.get(headerFieldKey);

StringBuilder sb = ``new StringBuilder();

for (String value : headerFieldValue) {

sb.append(value);

sb.append(``""``);

}

if (headerFieldKey != ``null``) {

clientResponse.addHeader(headerFieldKey, sb.toString());

}

}

String respStr = ``null``;

if (con.getResponseCode() >= ``400 && con.getErrorStream() != ``null``) {

if (ignoreAuthenticationErrors && (con.getResponseCode() == ``498 || con.getResponseCode() == ``499``))

{

return true``;

}

respStr = webResponseToString(con.getErrorStream());

} ``else {

respStr = webResponseToString(con.getInputStream());

}

_log(Level.INFO, ``"rest response:\n" + respStr);

clientResponse.setStatus(con.getResponseCode());

OutputStream ostream = clientResponse.getOutputStream();

ostream.write(respStr.getBytes(Charset.forName(``"UTF-8"``)));

ostream.flush();

ostream.close();

}

return false``;

}

private HttpURLConnection doHTTPRequest(String uri, ``byte``[] bytes, String method, String referer, String contentType) ``throws IOException {

URL url = ``new URL(uri);

HttpURLConnection con = (HttpURLConnection) url.openConnection();

con.setConnectTimeout(``5000``);

con.setReadTimeout(``60000``);

con.setRequestProperty(``"Referer"``, referer);

con.setRequestMethod(method);

if (bytes != ``null && bytes.length > ``0``) {

con.setDoOutput(``true``);

if (contentType == ``null || contentType.isEmpty()) {

contentType = ``"application/x-www-form-urlencoded"``;

}

con.setRequestProperty(``"Content-Type"``, contentType);

OutputStream os = con.getOutputStream();

os.write(bytes);

}

return con;

}

private String addTokenToUri(String uri, String token) {

if (token != ``null && !token.isEmpty())

uri += uri.contains(``"?"``) ? ``"&token=" + token : ``"?token=" + token;

return uri;

}

private String getJsonValue(String text, String key) {

int i = text.indexOf(key + ``":"``);

if``(i == -``1``) {

i = text.indexOf(key + ``"\":"``);

}

String value = ``""``;

if (i > -``1``) {

value = text.substring(text.indexOf(``':'``, i) + ``1``).trim();

if``(value.length() == ``0``) {

return ""``;

}

if``(value.charAt(``0``) == ``'"' || value.charAt(``0``) == ``'\''``) {

int index = value.indexOf(value.charAt(``0``), ``1``);

value = value.substring(``1``, index).trim();

} ``else if``(value.charAt(``0``) == ``'{' || value.charAt(``0``) == ``'['``) {

value = value.trim();

} ``else {

value = value.substring(``0``, value.indexOf(``','``)).trim();

}

}

_log(Level.FINE, ``"Extracted " + key + ``" Value: " + value);

return value;

}

//writing Log file

private static Object _lockobject = ``new Object();

private static Logger logger = Logger.getLogger(``"SIMPLE_REST_PROXY_LOGGER"``);

private static String logFileName = ``"proxy.log"``;

private static boolean okToLog = ``true``;

private static String defaultLogLevel = ``"INFO"``;

private static void _log(Level level, String s, Throwable thrown) {

try {

System.out.println(s);

String filename = logFileName;

boolean okToLog = filename != ``null && !filename.isEmpty() && logger != ``null``;

synchronized (_lockobject) {

if (okToLog) {

if (logger.getUseParentHandlers()) {

FileHandler fh = ``new FileHandler(filename, ``true``);

logger.addHandler(fh);

SimpleFormatter formatter = ``new SimpleFormatter();

fh.setFormatter(formatter);

logger.setUseParentHandlers(``false``);

String logLevelStr = defaultLogLevel;

Level logLevel = Level.SEVERE;

if (logLevelStr != ``null``) {

try {

logLevel = Level.parse(logLevelStr);

} ``catch (IllegalArgumentException e) {

SimpleDateFormat dt = ``new SimpleDateFormat(``"yyyy-MM-dd HH:mm:ss"``);

System.err.println(dt.format(``new Date()) + ``": " + logLevelStr + ``" is not a valid logging level. Defaulting to SEVERE."``);

}

}

logger.setLevel(logLevel);

logger.info(``"Log handler configured and initialized."``);

}

if (thrown != ``null``) {

logger.log(level, s, thrown);

} ``else {

logger.log(level, s);

}

}

}

} ``catch (Exception e) {

SimpleDateFormat dt = ``new SimpleDateFormat(``"yyyy-MM-dd HH:mm:ss"``);

System.err.println(``"Error writing to log: "``);

System.err.println(dt.format(``new Date()) + ``" " + s);

e.printStackTrace();

}

}

private static void _log(String s, Throwable thrown) {

_log(Level.SEVERE, s, thrown);

}

private static void _log(Level level, String s) {

_log(level, s, ``null``);

}

private static void sendErrorResponse(HttpServletResponse response, String errorDetails, String errorMessage, ``int errorCode) ``throws IOException {

String message = ``"{" +

"\"error\": {" +

"\"code\": " + errorCode + ``"," +

"\"details\": [" +

"\"" + errorDetails + ``"\"" +

"], \"message\": \"" + errorMessage + ``"\"}}"``;

response.setStatus(errorCode);

OutputStream output = response.getOutputStream();

output.write(message.getBytes());

output.flush();

}

private static void _sendURLMismatchError(HttpServletResponse response) ``throws IOException {

sendErrorResponse(response, ``"The proxy tried to resolve a prohibited or malformed URL. The server does not meet one of the preconditions that the requester put on the request."``,

"403 - Forbidden: Access is denied."``, HttpServletResponse.SC_FORBIDDEN);

}

%>

<%

_log(Level.INFO, ``"proxy took the control!"``);

if (REST_SERVER_BASE == ``null``) {

_sendURLMismatchError(response);

return``;

}

HttpURLConnection con = ``null``;

try {

byte``[] postBody = readRequestPostBody(request);

String post = (``new String(postBody, Charset.forName(``"UTF-8"``))).trim();

post = post.substring(``0``, post.length() - ``1``);

System.out.println(post);

String toServerUrl = REST_SERVER_BASE + getJsonValue(post,``"path"``);

String httpMethod = getJsonValue(post, ``"method"``).toUpperCase();

String params = getJsonValue(post,``"params"``);

String headers = getJsonValue(post, ``"headers"``);

String data = getJsonValue(post,``"data"``);

data = (data != ``null && !``""``.equals(data.trim()))?URLDecoder.decode(data,``"UTF-8"``):``""``;

if (params != ``null && params.length() > ``0``) {

toServerUrl += ``"?" + params;

}

_log(Level.INFO, ``"toServerUrl: " + toServerUrl);

con = forwardToServer(request, httpMethod, toServerUrl, data != ``null ? data.getBytes(Charset.forName(``"UTF-8"``)) : ``null``);

_log(Level.INFO, ``"passing back to client"``);

fetchAndPassBackToClient(con, response, ``true``);

response.flushBuffer();

out.clear();

out = pageContext.pushBody();

} ``catch (FileNotFoundException e) {

try {

_log(``"404 Not Found ."``, e);

response.sendError(``404``, e.getLocalizedMessage() + ``" is NOT Found."``);

return``;

} ``catch (IOException finalErr) {

_log(``"There was an error sending a response to the client. Will not try again."``, finalErr);

}

} ``catch (Exception e) {

e.printStackTrace();

try {

_log(``"A fatal proxy error occurred."``, e);

response.sendError(``500``, e.getLocalizedMessage());

return``;

} ``catch (IOException finalErr) {

_log(``"There was an error sending a response to the client. Will not try again."``, finalErr);

}

} ``finally {

con.disconnect();

}

%>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,563评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,694评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,672评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,965评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,690评论 6 413
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,019评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,013评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,188评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,718评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,438评论 3 360
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,667评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,149评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,845评论 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,252评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,590评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,384评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,635评论 2 380

推荐阅读更多精彩内容