Atitit 通用服务端代理接口 转接口 attilax总结

Atitit 通用服务端代理接口  转接口 attilax总结

 

1.1. 主要使用场景: 强行跨域,方便界面与后端的数据调用 1

1.2. 原理:使用httpclient转发接口数据。 1

1.3. 注意::元接口的数据编码最好不用动,直接stream转换。。 1

1.4. 大概流程与算法 1

1.5. 核心代码 2

1.6. 范例与使用说明,天气接口,需要使用本地html文件读取其他域名的rest api 4

 

 

目前我们自己的 通用接口基本可以满足数据查询,数据更新删除的这些场合了,甚至可以做到主要靠前端人员就可以做很多项目了(还缺少一个通用excel导出功能)。。

但面对别人提供的接口,还需要做一些转换。。因为默认html ajax是读取不了第三方域名地址的接口的。

 

1.1. 主要使用场景: 强行跨域,方便界面与后端的数据调用

对方给的接口没有跨域设置。导致不能直接在界面使用。。

优先让对方开通跨域设置。。如果不能开通,比如第三方接口,或者对方不愿意开通此设置。

 

就需要使用服务端代理做个转接口。。

 

1.2. 原理:使用httpclient转发接口数据。

 

1.3. 注意::元接口的数据编码最好不用动,直接stream转换。。

未来版本规划::: 支持编码转换 gbk utf8等。

支持

 

1.4. 大概流程与算法

/Proxy.java 入口

HttpUtil发送http请求

然后stream交换

1.5. 核心代码

/atiplat_ee/src/com/attilax/rest/Proxy.java

@Override

public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {

//String url = "http://www.weather.com.cn/data/cityinfo/101250101.html";

HttpUtil.sendGet2outStream(req.getParameter("url"), res.getOutputStream());

 

 

 

}

 

/atiplat_ee/src/com/attilax/net/HttpUtil.java

 

 public static  void sendGet2outStream(String url, String param, OutputStream outStream) {

String result = "";

        BufferedReader in = null;

        try {

            String urlNameString = url + "?" + param;

            URL realUrl = new URL(urlNameString);

            // 鎵撳紑鍜孶RL涔嬮棿鐨勮繛鎺�

            URLConnection connection = realUrl.openConnection();

            // 璁剧疆閫氱敤鐨勮姹傚睘鎬�

            connection.setRequestProperty("accept", "*/*");

            connection.setRequestProperty("connection", "Keep-Alive");

            connection.setRequestProperty("user-agent",

                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

            // 寤虹珛瀹為檯鐨勮繛鎺�

            connection.connect();

            // 鑾峰彇鎵�鏈夊搷搴斿ご瀛楁

            Map<String, List<String>> map = connection.getHeaderFields();

            // 閬嶅巻鎵�鏈夌殑鍝嶅簲澶村瓧娈�

            for (String key : map.keySet()) {

                System.out.println(key + "--->" + map.get(key));

            }

          

// 瀹氫箟 BufferedReader杈撳叆娴佹潵璇诲彇URL鐨勫搷搴�

            InputStream inputStream = connection.getInputStream();

            StreamUtil.streamEx(inputStream, outStream);

 

 

 

/atiplat_ee/src/com/attilax/io/StreamUtil.java

 

public static void streamEx(InputStream inStream, OutputStream outStream) {

int bytesum = 0;

// int byteread = 0;

try {

int byteread;

byte[] buffer = new byte[1204];

int length;

while ((byteread = inStream.read(buffer)) != -1) {

bytesum += byteread;

// System.out.println(bytesum);

outStream.write(buffer, 0, byteread);

}

outStream.flush();

} catch (Exception e) {

ExUtil.throwExV2(e);

}

 

try {

inStream.close();

} catch (Exception e) {

// TODO: handle exception

}

try {

outStream.close();

} catch (Exception e) {

// TODO: handle exception

}

 

}

 

 

 

1.6. 范例与使用说明,天气接口,需要使用本地html文件读取其他域名的rest api

http://www.weather.com.cn/data/cityinfo/101250101.html

 

返回

{"weatherinfo":{"city":"长沙","cityid":"101250101","temp1":"11℃","temp2":"22℃","weather":"多云","img1":"n1.gif","img2":"d1.gif","ptime":"18:00"}}

 

转接口使用

http://localhost:8088/proxy?url=http%3A%2F%2Fwww.weather.com.cn%2Fdata%2Fcityinfo%2F101250101.html

 

提供一个url参数,指明原接口的url即可。。注意莫忘urlencode

 

 

返回

{"weatherinfo":{"city":"长沙","cityid":"101250101","temp1":"11℃","temp2":"22℃","weather":"多云","img1":"n1.gif","img2":"d1.gif","ptime":"18:00"}}

 

作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

捕鸟王"Bird Catcher  kok  虔诚者Pious 宗教信仰捍卫者 Defender Of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak 万兽之王

简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon bin adam Al Rapanui 埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当  阿尔 拉帕努伊

常用名:艾提拉(艾龙),  EMAIL:1466519819@qq.com

 

 

头衔:uke总部o2o负责人,全球网格化项目创始人,

uke交友协会会长  uke捕猎协会会长 Emir Uke部落首席大酋长,

 

uke宗教与文化融合事务部部长, uke宗教改革委员会副主席

uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,

 

uke 首席cto   软件部门总监 技术部副总监  研发部门总监主管  产品部副经理 项目部副经理   uke科技研究院院长uke软件培训大师

 

uke波利尼西亚区大区连锁负责人 汤加王国区域负责人 uke克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke布维岛和南乔治亚和南桑威奇群岛大区连锁负责人

 Uke软件标准化协会理事长理事长 Uke 数据库与存储标准化协会副会长

 

uke终身教育学校副校长   Uke医院 与医学院方面的创始人

 uec学院校长, uecip图像处理机器视觉专业系主任   uke文档检索专业系主任

Uke图像处理与机器视觉学院首席院长

Uke 户外运动协会理事长  度假村首席大村长   uke出版社编辑总编

 

转载请注明来源:attilax的专栏  ?http://blog.csdn.net/attilax

--Atiend  v8

 

posted @ 2017-03-09 20:47  attilaxAti  阅读(36)  评论(0编辑  收藏  举报