ajax跨域请求使用代理
public class ProxyHandler extends HttpServlet {
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(ProxyHandler.class);
private static final String CHARSET_UTF8 = "UTF-8";
public static final String CONTENT_URL_NAME = "url";
public void init(ServletConfig config) throws ServletException {
super.init();
}
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
noSecurityRequest(req, resp);
}
private void noSecurityRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException {
logger.info("ProxyHandler noSecurityRequest 请求类型: GET");
String url0 = "";
OutputStream out = null;
HttpURLConnection conn = null;
String requestContent = req.getContentType();
String requestCharset = req.getCharacterEncoding();
StringBuffer requestContentType = new StringBuffer();
if (requestContent != null) {
requestContentType.append(requestContent);
if (requestCharset != null) {
requestContentType.append(";charset=").append(requestCharset);
}
}
try {
url0 = req.getQueryString();
if (url0 != null)
url0 = URLDecoder.decode(url0, "UTF-8");
if (url0.startsWith("url=")) {
url0 = url0.substring(4);
}
if (url0.indexOf("requestTime") != -1) {
url0 = url0.split("requestTime")[0];
url0 = url0.substring(0, url0.length() - 1);
}
// 参数空格替换成%20
url0 = url0.replace(" ", "%20");
URL url = new URL(url0);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
if (!requestContentType.toString().equals("")) {
conn.setRequestProperty("Content-Type", requestContentType.toString());
}
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
String contentType = conn.getContentType();
String encoding = conn.getContentEncoding();
out = resp.getOutputStream();
resp.setContentType(contentType);
resp.setHeader("Content-Encoding", encoding);
BufferedInputStream in = new BufferedInputStream(conn.getInputStream());
out = resp.getOutputStream();
int len = 0;
byte[] b = new byte[1024];
while ((len = in.read(b)) > 0) {
out.write(b, 0, len);
}
out.flush();
logger.info("\n请求地址: " + url0 + "\n请求成功!");
} catch (Exception e) {
logger.error("请求地址: " + url0 + "\n请求失败: " + e);
try {
if (out != null) {
out.close();
}
if (conn != null)
conn.disconnect();
} catch (Exception e1) {
logger.error(e1);
}
try {
if (out != null) {
out.close();
}
if (conn != null)
conn.disconnect();
} catch (Exception e2) {
logger.error(e2);
}
} finally {
try {
if (out != null) {
out.close();
}
if (conn != null)
conn.disconnect();
} catch (Exception e) {
logger.error(e);
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.info("请求类型: POST");
InputStream indoc = request.getInputStream();
String url0 = request.getQueryString();
if (url0 != null) {
url0 = URLDecoder.decode(url0, "UTF-8");
}
String requestContent = request.getContentType();
String requestCharset = request.getCharacterEncoding();
StringBuffer requestContentType = new StringBuffer();
if (requestContent != null) {
requestContentType.append(requestContent);
if (requestCharset != null) {
requestContentType.append(";charset=").append(requestCharset);
}
}
OutputStream out = response.getOutputStream();
try {
if (url0.startsWith("url=")) {
String urlString = url0.substring(4);
URL url = new URL(urlString);
BufferedInputStream in = null;
HttpURLConnection connection = null;
byte[] bs = (byte[]) null;
if (url != null) {
try {
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", requestContentType.toString());
connection.setDoInput(true);
connection.setDoOutput(true);
OutputStream toserver = connection.getOutputStream();
int l = 0;
while ((l = indoc.read()) != -1) {
toserver.write(l);
}
toserver.flush();
toserver.close();
String responseContentType = connection.getContentType();
String responseCharset = connection.getContentEncoding();
response.setContentType(responseContentType);
response.setCharacterEncoding(responseCharset);
in = new BufferedInputStream(connection.getInputStream());
bs = new byte[1024];
int startpos = 0;
int num = 0;
num = in.read(bs, startpos, 1024);
logger.info("返回信息:");
while (num != -1) {
out.write(bs, 0, num);
logger.info(new String(bs));
num = in.read(bs, 0, 1024);
}
logger.info("\n请求地址: " + url0 + "\n请求成功!");
} catch (IOException e) {
logger.info("\n请求地址: " + url0 + "\n请求成功!");
if (in != null)
try {
in.close();
} catch (Exception localException1) {
}
if (connection == null) {
if (in != null)
try {
in.close();
} catch (Exception localException2) {
}
if (connection != null) {
try {
connection.disconnect();
} catch (Exception localException3) {
}
}
if (out == null)
return;
out.flush();
out.close();
return;
}
try {
connection.disconnect();
} catch (Exception localException4) {
}
if (in != null)
try {
in.close();
} catch (Exception localException5) {
}
if (connection != null)
try {
connection.disconnect();
} catch (Exception localException6) {
}
} finally {
if (in != null)
try {
in.close();
} catch (Exception localException7) {
}
if (connection != null)
try {
connection.disconnect();
} catch (Exception localException8) {
}
}
try {
connection.disconnect();
} catch (Exception localException11) {
}
}
}
} catch (Exception e) {
logger.error(e);
} finally {
if (out != null) {
out.flush();
out.close();
}
}
}
}
ajax跨域请求使用代理的更多相关文章
- 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。
ajax跨域请求对于前端开发者几乎在任何一个项目中都会用到,众所周知,跨域请求有三种方式: jsonp; XHR2 代理: jsonp: 这种应该是开发中是使用的最多的,最常见的跨域请求方法,其实aj ...
- 用iframe设置代理解决ajax跨域请求问题
面对ajax跨域请求的问题,想用代理的方式来解决这个跨域问题.在服务器端创建一个静态的代理页面,在客户端用iframe调用这个代理 今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到aja ...
- 解决ajax跨域请求 (总结)
ajax跨域请求,目前已用几种方法实现: 1)用原生js的xhr对象实现. var url="http://freegeoip.net/json/" ...
- php中ajax跨域请求---小记
php中ajax跨域请求---小记 前端时间,遇到的一个问题,情况大约是这样: 原来的写法: 前端js文件中: $.ajax({ type:'get', url:'http://wan.xxx.c ...
- AJAX跨域请求json数据的实现方法
这篇文章介绍了AJAX跨域请求json数据的实现方法,有需要的朋友可以参考一下 我们都知道,AJAX的一大限制是不允许跨域请求. 不过通过使用JSONP来实现.JSONP是一种通过脚本标记注入的方式, ...
- 第114天:Ajax跨域请求解决方法(二)
一.什么是跨域 我们先回顾一下域名地址的组成: http:// www . google : 8080 / script/jquery.js http:// (协议号) www (子 ...
- 为什么返回的数据前面有callback? ashx/json.ashx?的后面加 callback=? 起什么作用 js url?callback=xxx xxx的介绍 ajax 跨域请求时url参数添加callback=?会实现跨域问题
为什么返回的数据前面有callback? 这是一个同学出现的问题,问到了我. 应该是这样的: 但问题是这样的: 我看了所请求的格式和后台要求的也是相同的.而且我也是这种做法,为什么他的就不行呢? ...
- JQ之$.ajax()方法以及ajax跨域请求
AJAX(Asynchronous javascript AND xml :异步javascript和xml):是一种创建交互式网页应用的网页开发技术.AJAX可以在不重新加载整个页面的情况下与服务器 ...
- Laravel中的ajax跨域请求
最近接触Laravel框架ajax跨域请求的过程中遇到一些问题,在这里做下总结. 一开始发起ajax请求一直报500错误,搜索相关资料后发现Laravel要允许跨域请求可以加入Cors中间件,代码如下 ...
随机推荐
- leetcood学习笔记-59-螺旋矩阵二
题目描述: 参考后的提交: class Solution: def generateMatrix(self, n: int): #l = [[0] * n] * n 此创建方法错误 l = [[] f ...
- Java——Eclipse使用
从这开始使用IDE啦~ ①File → New → Java Project →填写工程名字,选择jdk版本,其他默认,单击finish. ②在Src(源文件)上鼠标右键 → new → packag ...
- Java高新技术第三篇:注解的使用
我们知道注解是在JDK1.5引入的,可能有的人没有用过注解,所以感觉注解这个东西没有什么用,但是深入了解注解,对以后学习框架有所帮助的,后面提到的JavaWeb的框架中很多都是基于注解的技术, 其实注 ...
- bzoj1001题解
[解题思路] 显然,这题的答案是这个网格图的最小割.根据最大流-最小割定理,我们可以用网络流算法来求其最小割,时间复杂度最小为O(V2√E). 特殊的,这个网格图是一个平面图,于是可以根据平面图最小割 ...
- 27 和为S的两个数字
0 引言 题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 1 抽象问题具体化 举例: 序列为{1,2,3,4 ...
- poj 3254 Corn Field
Description Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; ...
- HDU-6441-Find Integer-费马大定理+奇偶数列法则
感觉这样看的比较清楚. 题意: 给出n和a,判断能否求出a^n+b^n=c^n中b和c的值,若可以输出b和c,否则则输出-1 -1. 思路: 数据给的比较大,但是题目很简单,套两个公式:费马打定理和奇 ...
- POJ 1159 Palindrome-最长公共子序列问题+滚动数组(dp数组的重复利用)(结合奇偶性)
Description A palindrome is a symmetrical string, that is, a string read identically from left to ri ...
- 【牛客提高训练营5B】旅游
题目 吉老师的题时过一年还是不会做 从\(1\)号点出发经过每条边至少一次并且还要回到\(1\)号点,这跟欧拉回路的条件非常像,但是欧拉回路的实际上是"经过每一条边恰好一次并且回到出发点&q ...
- Neo4j和Elasticsearch
Neo4j和Elasticsearch Neo4j和Elasticsearch是一种让人眼前一亮的组合,为什么需要把搜索和图表结合起来呢?它们是如何使用的呢? 在无处不在的互联网搜索引擎的推动下,全文 ...