Java后台调用第三方接口

前言

大家好,我是南城、有潇湘,一个有点文学气息的Java小白,如果我得文章对您有所帮助,不胜荣幸!!!

项目场景:

当我们进行微信小程序开发的时候,有时候避免不了需要去和其他项目进行对接,去调用其他项目的接口,但是由于微信小程序规则的限制,前端没办法访问外部链接,这个时候就需要后端对接口进行处理之后将数据交给前端.


问题描述:

①后端如何调用外部接口?
②如何在第三方接口有权限认证的情况下动态处理?


问题分析:

①首先我们确定一下我们需要什么以及我们有什么和没有什么,我们需要的是接口返回的数据,把这个被调用的接口比作一个房子,我们有的就是通往这个房子的路线以及一块敲门砖(条件),我们没有的就是门后屋子里的一切东西我们都不知道.这就好比我们和屋子各是一个服务器,我们需要的是服务器之间的数据交换,那么这个时候io流是不是就可以解决这个问题呢?


解决方案:

对于后端来说,我们可以效仿我们平时写测试类的思路,我们需要搞定被调用需要的东西传给它,然后拿到它返给我们的数据.

@GetMapping("getFcstlnRegion")
    public  String getFcstlnRegion() throws Exception{
        URL url= new URL("外部链接");
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                        url.openStream()));

        String inputLine;

        while ((inputLine = in.readLine()) != null)
            System.out.println(inputLine);

        in.close();
        return inputLine;
    }


我们先写一个简单的io流,试着去访问一下:

在这里插入图片描述
我们通过返回结果可以看到,我们确实访问到了,但是却不被认可,被赶出来了,那么我们现在就要去获得认可.根据返回信息我们看到,我们的访问ip不合法.首先我们知道,我们的本机应该有三个地址:本地地址,局域网地址,以及外网地址.我们既然去访问的第三方服务器,毫无疑问应该使用我们的外网地址,很多网站都可以获取到我们的外网地址,比如http://ip.chinaz.com/或者http://pv.sohu.com/cityjson?ie=utf-8都可以.但是我们不可能写死,因为服务器地址变化的几率并不小,那么我们是否可以动态的去获取我们的外网IP?我们使用和刚才一样的方法,我们通过io流去访问查询外网ip的网站,去读取到返回的信息:

//获取外网ip
    public static String getV4IP(){
        String ip = "http://pv.sohu.com/cityjson?ie=utf-8";

        String inputLine = "";
        String read = "";
        try {
            URL url = new URL(ip);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
            while ((read = in.readLine()) != null) {
                inputLine += read;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(inputLine);
        return inputLine;
    }


 	public static void main(String[] args) {
        getV4IP();
    }

我们运行getV4IP()方法查看返回,打印返回结果,发现返回的是一个固定的字符串:
在这里插入图片描述
我们可以清楚的看到我们需要的ip地址确实拿到了,但是同时还有一些我们不需要的东西,这个时候就简单了,既然返回的格式是固定的,那么我们只需要对字符串进行简单的切割处理就好了:

 //获取外网ip
    public static String getV4IP(){
        String ip = "http://pv.sohu.com/cityjson?ie=utf-8";

        String inputLine = "";
        String read = "";
        try {
            URL url = new URL(ip);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
            while ((read = in.readLine()) != null) {
                inputLine += read;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(inputLine);//var returnCitySN = {"cip": "111.57.0.50", "cid": "CN", "cname": "CHINA"};
        String substring = inputLine.substring(28, 39);
        System.out.println("外网ip:"+substring);//111.57.0.50
        return substring;
    }




    public static void main(String[] args) {
        getV4IP();
    }

我们再打印一下切割后的结果:
在这里插入图片描述
我们就拿到了我们需要的东西.我们再去拿着敲门砖找房子:
在这里插入图片描述
我们再次访问的时候,发现我们被识别了,并成功拿到了我们想要的数据.
在这里插入图片描述
果然,io流传输界万能的神.我这里用到的是IP,类似的其他的都可以类比的去实现.

一点点的文学气息

**文学小提问:**世人皆知春宵一刻值千金,你知道下一句所为何吗?
**寄语:**大鹏一日同风起,扶摇直上九万里。
**作者笔录:**诸君既有登天揽月之志,即无高踏之台给吾上乎?然今高踏之台,如池塘戏鱼虾之流,食饥之道,非吾之愿也。吾之志,上可登临望月辰,下可临渊观蛟龙,月辰不可触,亦上而抚之,蛟龙不可戏,亦下而降之。诸君年少乎?若年少,不可贪于池塘斤斤肥鱼而步不离,望北冥浩瀚而却步。守而鱼之,终有尽时,不若动而渔之,无穷尽矣。非乎?亦持老骥伏枥之心,汉升壮哉之志。吾之志,有其心而动,诸君共勉。

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值