URLConnection调用接口

写在前面:

  项目是java web,jdk1.4,weblogic 7;对方.net系统,用wcf开发的接口。对方提供接口url地址,以及说明用post方式去调用,无需传递参数,直接返回json array(json数组格式的数据)

  调用接口的方法有很多中,框架调用,ajax调用,urlConnection等等.由于项目需要,需要远程调用对方.net系统的接口,其接口是用wcf开发的,然后我们这边的系统是java,并且jdk是1.4,所以主流的一些框架调用已经用不了了,一般要jdk1.6以上才可以。说到这里,axis是可以适用于jdk1.4的,但是当采用客户端生成代码的方式的时候,我生成的类有缺少,不知道为啥,果断放弃;然后由于是跨域调用接口(也就是双方的系统不在一个服务器里面),并且需要post方式去访问,故ajax的方式也不行,因为ajax不支持跨域,当然利用jsonp是可以跨域的,但是它是采用get方式访问的。在挣扎尝试了两三天后,求助贴吧大神,大神跟我语音,让我用httpurlconnection的方式去访问,也就是URLConnection调用接口。之后,我又拿出了传智播客的webservice的视频笔记,上面也有提及到采用URLConnection调用接口,于是我就打算试试。成功啦......真是强大哈。。。(貌似这种方式可以适用于各种接口的调用,也可以调用webservice,大家都可以试一试,遇到问题不要怕,啊哈哈哈。。。。。)

  

  1.准备工作:

  对于URLConnection调用接口貌似不需要导入任何相关的jar包,这个要根据项目来定。这里返回的是json数组的字符串,所以这里我要用到json相关的jar来进行获取。导入json的jar包就可以了。

  代码:可以自己先写一个main java程序来连接测试一下,然后再放到具体的项目上去进行调用。

public static void main(String[] args) {
        
        //创建url地址 这里的url地址我是乱写的  你们填写自己的需要调用的接口就好
        URL url = new URL("http://10.10.10.83/GetProjectNameService/GetProjectNameService.svc/getProjectName");
        //打开连接
        URLConnection conn = url.openConnection();
        //转换成HttpURL
        HttpURLConnection httpConn = (HttpURLConnection) conn;
        
        //连接超时的相关设置   看相关博客说要加上 就没有去掉
        System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
        System.setProperty("sun.net.client.defaultReadTimeout", "30000");
        
        //打开输入输出的开关
        httpConn.setDoInput(true);
        httpConn.setDoOutput(true);
        //post提交不能有缓存
        httpConn.setUseCaches(false);
        //设定传送的内容类型是可序列化的java对象  如果不需要传递参数 就不需要写就行了
        //httpConn.setRequestProperty("Content-type", "application/x-java-serialized-object");
        //httpConn.setRequestProperty("Content-type", "UTF-8");
        //设置请求的头信息    这里的请求类型是根据自己需要传递的参数来决定的  
        //httpConn.setRequestProperty("Content-type", "text/xml;charset=UTF-8");
        
     //注意如果这里是get请求方式 且 不许需要传递参数 这里直接将post换为get  且删掉获得输出流 并发送数据 的相关代码即可
//设置请求方式 httpConn.setRequestMethod("POST"); //获得输出流 OutputStream out = httpConn.getOutputStream(); //发送数据 即使什么参数也不用传递 也要发送数据 穿空的字符串就好了 ObjectOutputStream objOut = new ObjectOutputStream(out); objOut.writeObject(new String("")); objOut.flush(); objOut.close(); //获得输入流 在这里获得输入流的时候 就已经默认执行了connect()方法 故上一步可以省略这个方法 InputStream in = httpConn.getInputStream(); //判断请求成功 StringBuffer sb = new StringBuffer(); JSONArray jarr = null; String str = ""; if(httpConn.getResponseCode() == 200){
//使用输入流的缓冲区 这里加入UTF-8可以解决乱码的问题 BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8")); String line = null; //读取输入流 while((line = reader.readLine()) != null){ sb.append(line); } str = sb.toString(); System.out.println("返回结果:"+str); //由于对方返回的结果是json数组格式的字符串 故将json数组格式的字符串转为json数组 //可根据自己项目的需要来转为需要的类型 具体方法 可以百度 jarr = new JSONArray(str); //遍历打印 for(int i=0;i<jarr.length();i++){ System.out.println(jarr.getString(i)); } } }

 交流群:527038646  嘻嘻嘻

  

原文地址:https://www.cnblogs.com/eleven258/p/7117099.html