ameimeng 发表于 2015-9-30 09:27:10

如何在BPM中使用REST服务(1):通过程序访问网页内容

  
  这篇文章主要描述如何通过程序来访问网页内容,这是访问REST服务的基础。
  在Java中,我们可以使用HttpUrlConnection类来实现,代码如下。





1 package http.base;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.InputStreamReader;
7 import java.net.HttpURLConnection;
8 import java.net.URL;
9 import java.nio.charset.Charset;
10 import java.util.Map;
11 import java.util.Vector;
12
13
14 public class HttpRequester {
15   private String defaultContentEncoding;
16
17   public HttpRequester() {
18         this.defaultContentEncoding = Charset.defaultCharset().name();
19   }
20
21   public HttpResponse sendGet(String urlString) throws IOException {
22         return this.send(urlString, "GET", null, null);
23   }
24
25   public HttpResponse sendGet(String urlString, Map<String, String> params)
26             throws IOException {
27         return this.send(urlString, "GET", params, null);
28   }
29
30   public HttpResponse sendGet(String urlString, Map<String, String> params,
31             Map<String, String> propertys) throws IOException {
32         return this.send(urlString, "GET", params, propertys);
33   }
34
35   public HttpResponse sendPost(String urlString) throws IOException {
36         return this.send(urlString, "POST", null, null);
37   }
38
39   public HttpResponse sendPost(String urlString, Map<String, String> params)
40             throws IOException {
41         return this.send(urlString, "POST", params, null);
42   }
43
44   public HttpResponse sendPost(String urlString, Map<String, String> params,
45             Map<String, String> propertys) throws IOException {
46         return this.send(urlString, "POST", params, propertys);
47   }
48
49   private HttpResponse send(String urlString, String method,
50             Map<String, String> parameters, Map<String, String> propertys)
51             throws IOException {
52         HttpURLConnection urlConnection = null;
53
54         if (method.equalsIgnoreCase("GET") && parameters != null) {
55             StringBuffer param = new StringBuffer();
56             int i = 0;
57             for (String key : parameters.keySet()) {
58               if (i == 0)
59                     param.append("?");
60               else
61                     param.append("&");
62               param.append(key).append("=").append(parameters.get(key));
63               i++;
64             }
65             urlString += param;
66         }
67         URL url = new URL(urlString);
68         urlConnection = (HttpURLConnection) url.openConnection();
69
70         urlConnection.setRequestMethod(method);
71         urlConnection.setDoOutput(true);
72         urlConnection.setDoInput(true);
73         urlConnection.setUseCaches(false);
74
75         if (propertys != null)
76             for (String key : propertys.keySet()) {
77               urlConnection.addRequestProperty(key, propertys.get(key));
78             }
79
80         if (method.equalsIgnoreCase("POST") && parameters != null) {
81             StringBuffer param = new StringBuffer();
82             for (String key : parameters.keySet()) {
83               param.append("&");
84               param.append(key).append("=").append(parameters.get(key));
85             }
86             urlConnection.getOutputStream().write(param.toString().getBytes());
87             urlConnection.getOutputStream().flush();
88             urlConnection.getOutputStream().close();
89         }
90
91         return this.makeContent(urlString, urlConnection);
92   }
93
94   private HttpResponse makeContent(String urlString,
95             HttpURLConnection urlConnection) throws IOException {
96         HttpResponse httpResponser = new HttpResponse();
97         try {
98             InputStream in = urlConnection.getInputStream();
99             BufferedReader bufferedReader = new BufferedReader(
100                     new InputStreamReader(in));
101             httpResponser.contentCollection = new Vector<String>();
102             StringBuffer temp = new StringBuffer();
103             String line = bufferedReader.readLine();
104             while (line != null) {
105               httpResponser.contentCollection.add(line);
106               temp.append(line).append("/r/n");
107               line = bufferedReader.readLine();
108             }
109             bufferedReader.close();
110
111             String ecod = urlConnection.getContentEncoding();
112             if (ecod == null)
113               ecod = this.defaultContentEncoding;
114
115             httpResponser.urlString = urlString;
116
117             httpResponser.defaultPort = urlConnection.getURL().getDefaultPort();
118             httpResponser.file = urlConnection.getURL().getFile();
119             httpResponser.host = urlConnection.getURL().getHost();
120             httpResponser.path = urlConnection.getURL().getPath();
121             httpResponser.port = urlConnection.getURL().getPort();
122             httpResponser.protocol = urlConnection.getURL().getProtocol();
123             httpResponser.query = urlConnection.getURL().getQuery();
124             httpResponser.ref = urlConnection.getURL().getRef();
125             httpResponser.userInfo = urlConnection.getURL().getUserInfo();
126
127             httpResponser.content = new String(temp.toString().getBytes(), ecod);
128             httpResponser.contentEncoding = ecod;
129             httpResponser.code = urlConnection.getResponseCode();
130             httpResponser.message = urlConnection.getResponseMessage();
131             httpResponser.contentType = urlConnection.getContentType();
132             httpResponser.method = urlConnection.getRequestMethod();
133             httpResponser.connectTimeout = urlConnection.getConnectTimeout();
134             httpResponser.readTimeout = urlConnection.getReadTimeout();
135
136             return httpResponser;
137         } catch (IOException e) {
138             throw e;
139         } finally {
140             if (urlConnection != null)
141               urlConnection.disconnect();
142         }
143   }
144
145   public String getDefaultContentEncoding() {
146         return this.defaultContentEncoding;
147   }
148
149   public void setDefaultContentEncoding(String defaultContentEncoding) {
150         this.defaultContentEncoding = defaultContentEncoding;
151   }
152 }
HttpRequest类




1 package http.base;
2
3 import java.util.Vector;
4
5 public class HttpResponse {
6
7   String urlString;
8   int defaultPort;
9   String file;
10   String host;
11   String path;
12   int port;
13   String protocol;
14   String query;
15   String ref;
16   String userInfo;
17   String contentEncoding;
18   String content;
19   String contentType;
20   int code;
21   String message;
22   String method;
23   int connectTimeout;
24   int readTimeout;
25   Vector<String> contentCollection;
26   
27   public String getContent() {
28         return content;
29   }
30
31   public String getContentType() {
32         return contentType;
33   }
34
35   public int getCode() {
36         return code;
37   }
38
39   public String getMessage() {
40         return message;
41   }
42
43   public Vector<String> getContentCollection() {
44         return contentCollection;
45   }
46
47   public String getContentEncoding() {
48         return contentEncoding;
49   }
50
51   public String getMethod() {
52         return method;
53   }
54
55   public int getConnectTimeout() {
56         return connectTimeout;
57   }
58
59   public int getReadTimeout() {
60         return readTimeout;
61   }
62
63   public String getUrlString() {
64         return urlString;
65   }
66
67   public int getDefaultPort() {
68         return defaultPort;
69   }
70
71   public String getFile() {
72         return file;
73   }
74
75   public String getHost() {
76         return host;
77   }
78
79   public String getPath() {
80         return path;
81   }
82
83   public int getPort() {
84         return port;
85   }
86
87   public String getProtocol() {
88         return protocol;
89   }
90
91   public String getQuery() {
92         return query;
93   }
94
95   public String getRef() {
96         return ref;
97   }
98
99   public String getUserInfo() {
100         return userInfo;
101   }
102
103 }
HttpResponse类  下面是一个简单的测试类。





1 package http.base;
2
3 public class HttpTest {
4   public static void main(String[] args) {
5         try {
6             HttpRequester request = new HttpRequester();
7             HttpResponse hr = request.sendGet("http://www.baidu.com");            
8
9             System.out.println(hr.getUrlString());
10             System.out.println(hr.getProtocol());
11             System.out.println(hr.getHost());
12             System.out.println(hr.getPort());
13             System.out.println(hr.getContentEncoding());
14             System.out.println(hr.getMethod());
15            
16             System.out.println(hr.getContent());
17
18         } catch (Exception e) {
19             e.printStackTrace();
20         }
21   }
22 }
View Code  因为REST服务的返回值一般都是JSON对象,下一篇文章中,我们来看Java对象和JSON之间如何转换。
页: [1]
查看完整版本: 如何在BPM中使用REST服务(1):通过程序访问网页内容