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