zoukankan      html  css  js  c++  java
  • 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  嘻嘻嘻

      

  • 相关阅读:
    poj3278 Catch That Cow
    poj2251 Dungeon Master
    poj1321 棋盘问题
    poj3083 Children of the Candy Cor
    jvm基础知识—垃圾回收机制
    jvm基础知识1
    java面试基础必备
    java soket通信总结 bio nio aio的区别和总结
    java scoket aIO 通信
    java scoket Blocking 阻塞IO socket通信四
  • 原文地址:https://www.cnblogs.com/eleven258/p/7117099.html
Copyright © 2011-2022 走看看