web service调用第三方接口

1. 什么是Web Service呢?从表面上看,WebService就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。从深层次上看,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。

2.Web Service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。它可以使用标准的互联网协议,像超文本传输协议HTTP和XML,将功能体现在互联网和企业内部网上。WebService平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用你喜欢的任何语言,在你喜欢的任何平台上写Web Service。

3.WebService 为Internet 上的组件服务•通过网络提供,以URL 定位方法调用•以Internet技术为基础•未來的分散式应用程序

见代码--------↓↓↓↓↓↓↓↓↓

/**
 * 调用对方接口方法
 * @param path 对方或第三方提供的路径
 * @param data 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析
 */
public static void interfaceUtil(String path,String data) {
    try {
        URL url = new URL(path);
        //打开和url之间的连接
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //设置请求方式
        conn.setRequestMethod("post");
        //设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,发送post请求必须设置
        /**
         *  get请求用不到conn.getOutputStream(),因为参数直接追加在地址后面,因此默认是false。  
         *    post请求(比如:文件上传)需要往服务区传输大量的数据,这些数据是放在http的body里面的,因此需要在建立连接以后,往服务端写数据。
         *    URL 连接可用于输入和/或输出。如果打算使用 URL连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。   
         *    URL 连接可用于输入和/或输出。如果打算使用 URL连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。 
         */
        conn.setDoOutput(true);    //以后就可以使用conn.getOutputStream().write()  
        conn.setDoInput(true);    //以后就可以使用conn.getInputStream().read()
        //获取URLConnection对象对应的输出流
        PrintWriter printWriter = null;
        printWriter = new PrintWriter(conn.getOutputStream());
        //发送请求参数即data
        printWriter.print(data);
        //缓冲数据
        printWriter.flush();
        //关闭资源
        printWriter.close();
        //获取URLConnection对象对应的输入流
        InputStream is = conn.getInputStream();    //因为总是使用conn.getInputStream()获取服务端的响应,因此默认值是true。  
        //构造一个字符流缓存
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String str = "";
        while ((str = br.readLine()) != null) {
            System.out.println(str);
        }
        //关闭输入流
        is.close();
        //断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
        //固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
        conn.disconnect();
        System.out.println("-----------over------------");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
* 测试
* 接口是阿里的所在地(市级)经纬度查询
*/
public static void main(String[] args) throws Exception{
    //对%C4%CF%BE%A9%CA%D0进行GBK解码
    String str1=URLDecoder.decode("%C4%CF%BE%A9%CA%D0","GBK");
    System.out.println("str1:"+str1);
    //对南京市进行GBK编码
    String str=URLEncoder.encode("南京市","GBK");
    System.out.println("str:"+str);
    interfaceUtil("http://gc.ditu.aliyun.com/geocoding?a="+str,"");
}

2018-11-08

原文地址:https://www.cnblogs.com/licheng0201/p/9930587.html