HttpConnection简单学习

简介:

我们在调用远程接口时,有时候用httpClient。当然我们也可以用java自带的一个类来做这个操作,这里有一个简单的例子:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package  com.hanchao.test;
import  java.io.BufferedReader;
import  java.io.InputStream;
import  java.io.InputStreamReader;
import  java.net.HttpURLConnection;
import  java.net.URL;
import  net.sf.json.JSONObject;
/***********************
  * @author:han  
  * @version:1.0      
  * @created:2013-9-23  
  ***********************
  */
public  class  TestHttpConnection1 {
     /**
      * 根据url远程调用相关的接口
      * *******************
      * @author: han
      * 2013-9-23
      * *******************
      * @param url
      * @return
      * @throws Exception
      */
     public  static  String getData(String urlStr)  throws  Exception {
           
         System.out.println( " =========== HttpConnectionUtil连接的地址:"  + urlStr);
         StringBuffer answer =  new  StringBuffer();
         InputStream is =  null ;
         InputStreamReader isr =  null ;
         BufferedReader br =  null ;
           
         try  {
             if (urlStr ==  null  || urlStr.equals( "" )) {
                 return  "" ;
             }
               
             URL url =  new  URL(urlStr);
             /**
              * url.openConnection()
              * 返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。
                     每次调用此 URL 的协议处理程序的 openConnection 方法都打开一个新的连接。
              */
             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
             /**
              * 将读超时设置为指定的超时值,以毫秒为单位。用一个非零值指定在建立到资源的连接后从 Input 流读入时的超时时间。
              * 如果在数据可读取之前超时期满,则会引发一个 java.net.SocketTimeoutException。超时时间为零表示无穷大超时。
                    此方法的一些非标准实现会忽略指定的超时。要查看读入超时设置,请调用 getReadTimeout()。
              */
             connection.setReadTimeout( 30000 );
             //设置 URL 请求的方式
             connection.setRequestMethod( "GET" );
             /**
              * 设置一个指定的超时值(以毫秒为单位),该值将在打开到此 URLConnection 引用的资源的通信链接时使用。
              * 如果在建立连接之前超时期满,则会引发一个 java.net.SocketTimeoutException。超时时间为零表示无穷大超时。
                     此方法的一些非标准实现可能忽略指定的超时。要查看连接超时设置,请调用 getConnectTimeout()。
              */
             connection.setConnectTimeout( 30000 );
               
             /**
              * 将此 URLConnection 的 doOutput 字段的值设置为指定的值。
                 URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输出,
                 则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false
              */
             connection.setDoOutput( true );
             /**
              * 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。
                   如果在已打开连接(此时 connected 字段的值为 true)的情况下调用 connect 方法,则忽略该调用。
               URLConnection 对象经历两个阶段:首先创建对象,然后建立连接。
                  在创建对象之后,建立连接之前,可指定各种选项(例如,doInput 和 UseCaches)。
                  连接后再进行设置就会发生错误。连接后才能进行的操作(例如 getContentLength),如有必要,将隐式执行连接。
              */
             connection.connect();
               
             is = connection.getInputStream();
             isr =  new  InputStreamReader(is, "UTF-8" );
             br =  new  BufferedReader(isr);
               
             if (br !=  null ) {
                 /*String readString = null;
                 while((readString = br.readLine()) != null) {
                     answer.append(readString);
                 }*/
                 for (String oneline = null;(oneline = br.readLine()) != null; answer.append("\n")) {
                     System.out.println(" ============== :" + oneline + "\n");
                     answer.append(oneline);
                 }
             }
               
             connection.disconnect();
             System.out.println(" =========== HttpConnectionUtil断开链接 =========");
         } catch (Exception e) {
             System.out.println(" ================ 连接超时。。。。");
             e.printStackTrace();
         } finally {
             if(br != null) {
                 try {
                     br.close();
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
             }
         }
         return answer.toString().trim();
     }
       
       
       
       
       
     /**
      * 测试main方法
      * *******************
      * @author: han
      * 2013-9-24
      * *******************
      * @param args
      */
     public static void main(String[] args) {
           
         String str = null;
         try {
             /**
              * test1
              */
             //str = getData("http://www.baidu.com");
               
             /**
              * test2
              */
         //  str = getData("http://localhost:8080/httpClient/ajax.jspx?type=car");
             /**
              *test3
              */
             str = getData( "http://localhost:8080/httpClient/ajax.jspx?type=json" );
               
             //str为json字符串
             JSONObject json = JSONObject.fromObject(str);
             System.out.println( " ========= jsonResult:"  ",key1:"  + json.get( "key1" ) +  ",key2:"  + json.get( "key2" ) +  ",key3:"  + json.get( "key3" ));
               
               
               
               
               
               
               
               
             System.out.println( " --------------- result:"  + str);
         catch  (Exception e) {
             e.printStackTrace();
         }
           
     }
       
       
       
       
       
       
       
}


下载例子:httpConnection




     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/1301189,如需转载请自行联系原作者


相关文章
|
3月前
|
算法 开发者 Python
pyton 学习技巧
【9月更文挑战第2天】pyton 学习技巧
40 2
|
算法 Ubuntu C语言
学习C++的意义
学习C++的意义
|
架构师 算法 程序员
学习之路九阴真经(二)
学习之路九阴真经
107 0
|
存储 缓存 NoSQL
学习总结
学习总结
|
弹性计算 运维 安全
我的学习之路
运用云服务器创建云笔记
|
弹性计算 监控 物联网
学习小结
简述我在嵌入式实验室对阿里云物联网平台、阿里云ECS的学习与应用和一些个人感悟。
|
JavaScript 前端开发 网络架构
JavaScriptEs6学习
JavaScriptEs6学习
了解自己的学习
关于“学习”的相关总结
509 0

相关实验场景

更多