Atitit 通用服务端代理接口 转接口 attilax总结
Atitit 通用服务端代理接口 转接口 attilax总结
1.1. 主要使用场景: 强行跨域,方便界面与后端的数据调用 1
1.3. 注意::元接口的数据编码最好不用动,直接stream转换。。 1
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