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

    xiaoxiao2021-03-25  94

    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://www.weather.com.cn/data/cityinfo/101250101.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

     

    转载请注明原文地址: https://ju.6miu.com/read-16098.html

    最新回复(0)