1 package com.ideal.common.util;
2
3 import java.io.BufferedReader;
4 import java.io.DataInputStream;
5 import java.io.DataOutputStream;
6 import java.io.File;
7 import java.io.FileInputStream;
8 import java.io.IOException;
9 import java.io.InputStreamReader;
10 import java.io.OutputStream;
11 import java.io.OutputStreamWriter;
12 import java.net.HttpURLConnection;
13 import java.net.SocketTimeoutException;
14 import java.net.URL;
15 import java.net.URLConnection;
16 import java.security.GeneralSecurityException;
17 import java.security.cert.CertificateException;
18 import java.security.cert.X509Certificate;
19 import java.util.ArrayList;
20 import java.util.HashMap;
21 import java.util.Iterator;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Map.Entry;
25
26 import javax.activation.MimetypesFileTypeMap;
27 import javax.net.ssl.SSLContext;
28 import javax.net.ssl.SSLException;
29 import javax.net.ssl.SSLSession;
30 import javax.net.ssl.SSLSocket;
31
32 import org.apache.commons.httpclient.ConnectTimeoutException;
33 import org.apache.commons.io.IOUtils;
34 import org.apache.http.HttpEntity;
35 import org.apache.http.HttpResponse;
36 import org.apache.http.NameValuePair;
37 import org.apache.http.client.HttpClient;
38 import org.apache.http.client.config.RequestConfig;
39 import org.apache.http.client.config.RequestConfig.Builder;
40 import org.apache.http.client.entity.UrlEncodedFormEntity;
41 import org.apache.http.client.methods.HttpGet;
42 import org.apache.http.client.methods.HttpPost;
43 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
44 import org.apache.http.conn.ssl.SSLContextBuilder;
45 import org.apache.http.conn.ssl.TrustStrategy;
46 import org.apache.http.conn.ssl.X509HostnameVerifier;
47 import org.apache.http.impl.client.CloseableHttpClient;
48 import org.apache.http.impl.client.DefaultHttpClient;
49 import org.apache.http.impl.client.HttpClients;
50 import org.apache.http.message.BasicNameValuePair;
51 import org.apache.http.util.EntityUtils;
52
53 import com.ideal.wechatThrid.util.HttpRequestUtil;
54
55
56 @SuppressWarnings("deprecation")
57 public class HttpXmlClient {
58 private static HttpClient client = null;
59 /**
60 * 向指定URL发送GET方法的请求
61 *
62 * @param url
63 * 发送请求的URL
64 * @param param
65 * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
66 * @return URL 所代表远程资源的响应结果
67 */
68 public static String sendGet(String url, String param) {
69 String result = "";
70 BufferedReader in = null;
71 try {
72 String urlNameString = url;
73 if (param != null) {
74 urlNameString = urlNameString + "?" + param;
75 }
76 URL realUrl = new URL(urlNameString);
77 // 打开和URL之间的连接
78 URLConnection connection = realUrl.openConnection();
79 // 设置通用的请求属性
80 connection.setRequestProperty("accept", "*/*");
81 connection.setRequestProperty("connection", "Keep-Alive");
82 connection.setRequestProperty("user-agent",
83 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
84 // 建立实际的连接
85 connection.connect();
86 // 获取所有响应头字段
87 Map<String, List<String>> map = connection.getHeaderFields();
88 // 遍历所有的响应头字段
89 for (String key : map.keySet()) {
90 System.out.println(key + "--->" + map.get(key));
91 }
92 // 定义 BufferedReader输入流来读取URL的响应
93 in = new BufferedReader(new InputStreamReader(
94 connection.getInputStream(),"utf-8"));//防止乱码
95 String line;
96 while ((line = in.readLine()) != null) {
97 result += line;
98 }
99 } catch (Exception e) {
100 System.out.println("发送GET请求出现异常!" + e);
101 e.printStackTrace();
102 }
103 // 使用finally块来关闭输入流
104 finally {
105 try {
106 if (in != null) {
107 in.close();
108 }
109 } catch (Exception e2) {
110 e2.printStackTrace();
111 }
112 }
113 return result;
114 }
115 public static String doPost(String url,Map<String,String> map) {
116 String body = null;
117 HttpEntity entity = null;
118 System.out.println(url);
119 try {
120 @SuppressWarnings("resource")
121 HttpClient httpClient = new DefaultHttpClient();
122 HttpPost method = new HttpPost(url);
123 //设置参数
124 List<NameValuePair> list = new ArrayList<NameValuePair>();
125 Iterator iterator = map.entrySet().iterator();
126 while(iterator.hasNext()){
127 Entry<String,String> elem = (Entry<String, String>) iterator.next();
128 list.add(new BasicNameValuePair(elem.getKey(),elem.getValue()));
129 }
130 if(list.size() > 0){
131 UrlEncodedFormEntity entity1 = new UrlEncodedFormEntity(list,"utf-8");
132 method.setEntity(entity1);
133 }
134 HttpResponse httpresponse = httpClient.execute(method);
135 entity = httpresponse.getEntity();
136 body = EntityUtils.toString(entity);
137 if (entity != null) {
138 entity.consumeContent();
139 }
140 } catch (Exception e) {
141 e.printStackTrace();
142 } finally {
143 if (entity != null) {
144 try {
145 entity.consumeContent();
146 } catch (IOException e) {
147 e.printStackTrace();
148 }
149 }
150 }
151 return body;
152 }
153 /**
154 * 上传图片
155 * @param urlStr
156 * @param textMap
157 * @param fileMap
158 * @param contentType 没有传入文件类型默认采用application/octet-stream
159 * contentType非空采用filename匹配默认的图片类型
160 * @return 返回response数据
161 */
162 @SuppressWarnings("rawtypes")
163 public static String formUpload(String urlStr, Map<String, String> textMap,
164 Map<String, String> fileMap,String contentType) {
165 String res = "";
166 HttpURLConnection conn = null;
167 // boundary就是request头和上传文件内容的分隔符
168 String BOUNDARY = "---------------------------123821742118716";
169 try {
170 URL url = new URL(urlStr);
171 conn = (HttpURLConnection) url.openConnection();
172 conn.setConnectTimeout(5000);
173 conn.setReadTimeout(30000);
174 conn.setDoOutput(true);
175 conn.setDoInput(true);
176 conn.setUseCaches(false);
177 conn.setRequestMethod("POST");
178 conn.setRequestProperty("Connection", "Keep-Alive");
179 conn.setRequestProperty("User-Agent",
180 "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
181 conn.setRequestProperty("Content-Type",
182 "multipart/form-data; boundary=" + BOUNDARY);
183 OutputStream out = new DataOutputStream(conn.getOutputStream());
184 // text
185 if (textMap != null) {
186 StringBuffer strBuf = new StringBuffer();
187 Iterator iter = textMap.entrySet().iterator();
188 while (iter.hasNext()) {
189 Map.Entry entry = (Map.Entry) iter.next();
190 String inputName = (String) entry.getKey();
191 String inputValue = (String) entry.getValue();
192 if (inputValue == null) {
193 continue;
194 }
195 strBuf.append("\r\n").append("--").append(BOUNDARY)
196 .append("\r\n");
197 strBuf.append("Content-Disposition: form-data; name=\""
198 + inputName + "\"\r\n\r\n");
199 strBuf.append(inputValue);
200 }
201 out.write(strBuf.toString().getBytes());
202 }
203 // file
204 if (fileMap != null) {
205 Iterator iter = fileMap.entrySet().iterator();
206 while (iter.hasNext()) {
207 Map.Entry entry = (Map.Entry) iter.next();
208 String inputName = (String) entry.getKey();
209 String inputValue = (String) entry.getValue();
210 if (inputValue == null) {
211 continue;
212 }
213 File file = new File(inputValue);
214 String filename = file.getName();
215
216 //没有传入文件类型,同时根据文件获取不到类型,默认采用application/octet-stream
217 contentType = new MimetypesFileTypeMap().getContentType(file);
218 //contentType非空采用filename匹配默认的图片类型
219 if(!"".equals(contentType)){
220 if (filename.endsWith(".png")) {
221 contentType = "image/png";
222 }else if (filename.endsWith(".jpg") || filename.endsWith(".jpeg") || filename.endsWith(".jpe")) {
223 contentType = "image/jpeg";
224 }else if (filename.endsWith(".gif")) {
225 contentType = "image/gif";
226 }else if (filename.endsWith(".ico")) {
227 contentType = "image/image/x-icon";
228 }
229 }
230 if (contentType == null || "".equals(contentType)) {
231 contentType = "application/octet-stream";
232 }
233 StringBuffer strBuf = new StringBuffer();
234 strBuf.append("\r\n").append("--").append(BOUNDARY)
235 .append("\r\n");
236 strBuf.append("Content-Disposition: form-data; name=\""
237 + inputName + "\"; filename=\"" + filename
238 + "\"\r\n");
239 strBuf.append("Content-Type:" + contentType + "\r\n\r\n");
240 out.write(strBuf.toString().getBytes());
241 DataInputStream in = new DataInputStream(
242 new FileInputStream(file));
243 int bytes = 0;
244 byte[] bufferOut = new byte[1024];
245 while ((bytes = in.read(bufferOut)) != -1) {
246 out.write(bufferOut, 0, bytes);
247 }
248 in.close();
249 }
250 }
251 byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
252 out.write(endData);
253 out.flush();
254 out.close();
255 // 读取返回数据
256 StringBuffer strBuf = new StringBuffer();
257 BufferedReader reader = new BufferedReader(new InputStreamReader(
258 conn.getInputStream()));
259 String line = null;
260 while ((line = reader.readLine()) != null) {
261 strBuf.append(line).append("\n");
262 }
263 res = strBuf.toString();
264 reader.close();
265 reader = null;
266 } catch (Exception e) {
267 System.out.println("发送POST请求出错。" + urlStr);
268 e.printStackTrace();
269 } finally {
270 if (conn != null) {
271 conn.disconnect();
272 conn = null;
273 }
274 }
275 return res;
276 }
277 public static String httpPostRequest(String url, String postContent) throws Exception{
278 OutputStream outputstream = null;
279 BufferedReader in = null;
280 try
281 {
282 URL url2 = new URL(url);
283 URLConnection httpurlconnection = url2.openConnection();
284 httpurlconnection.setConnectTimeout(10 * 1000);
285 httpurlconnection.setDoOutput(true);
286 httpurlconnection.setUseCaches(false);
287 OutputStreamWriter out = new OutputStreamWriter(httpurlconnection
288 .getOutputStream(), "UTF-8");
289 out.write(postContent);
290 out.flush();
291
292 StringBuffer result = new StringBuffer();
293 in = new BufferedReader(new InputStreamReader(httpurlconnection
294 .getInputStream(),"UTF-8"));
295 String line;
296 while ((line = in.readLine()) != null)
297 {
298 result.append(line);
299 }
300 return result.toString();
301 }
302 catch(Exception ex){
303 throw new Exception("post请求异常:" + ex.getMessage());
304 }
305 finally
306 {
307 if (outputstream != null)
308 {
309 try
310 {
311 outputstream.close();
312 }
313 catch (IOException e)
314 {
315 outputstream = null;
316 }
317 }
318 if (in != null)
319 {
320 try
321 {
322 in.close();
323 }
324 catch (IOException e)
325 {
326 in = null;
327 }
328 }
329 }
330 }
331 /**
332 * 测试上传png图片
333 *
334 */
335 public static void testUploadImage(){
336 String url = "http://10.4.253.41/PTYUN1.2/extLogin/test.do";
337 String fileName = "E:/test/ts.png";
338 Map<String, String> textMap = new HashMap<String, String>();
339 //可以设置多个input的name,value
340 textMap.put("name", "testname");
341 textMap.put("type", "2");
342 //设置file的name,路径
343 Map<String, String> fileMap = new HashMap<String, String>();
344 fileMap.put("upfile", fileName);
345 String contentType = "";//image/png
346 String ret = formUpload(url, textMap, fileMap,contentType);
347 System.out.println(ret);
348 //{"status":"0","message":"add succeed","baking_url":"group1\/M00\/00\/A8\/CgACJ1Zo-LuAN207AAQA3nlGY5k151.png"}
349 }
350
351 /**
352 * 发送一个 GET 请求
353 *
354 * @param url
355 * @param charset
356 * @param connTimeout 建立链接超时时间,毫秒.
357 * @param readTimeout 响应超时时间,毫秒.
358 * @return
359 * @throws ConnectTimeoutException 建立链接超时
360 * @throws SocketTimeoutException 响应超时
361 * @throws Exception
362 */
363 public static String get(String url, String charset, Integer connTimeout,Integer readTimeout)
364 throws ConnectTimeoutException,SocketTimeoutException, Exception {
365
366 HttpClient client = null;
367 HttpGet get = new HttpGet(url);
368 String result = "";
369 try {
370 // 设置参数
371 Builder customReqConf = RequestConfig.custom();
372 if (connTimeout != null) {
373 customReqConf.setConnectTimeout(connTimeout);
374 }
375 if (readTimeout != null) {
376 customReqConf.setSocketTimeout(readTimeout);
377 }
378 get.setConfig(customReqConf.build());
379
380 HttpResponse res = null;
381
382 if (url.startsWith("https")) {
383 // 执行 Https 请求.
384 client = createSSLInsecureClient();
385 res = client.execute(get);
386 } else {
387 // 执行 Http 请求.
388 //client = HttpClientUtils.client;
389 res = client.execute(get);
390 }
391
392 result = IOUtils.toString(res.getEntity().getContent(), charset);
393 } finally {
394 get.releaseConnection();
395 if (url.startsWith("https") && client != null && client instanceof CloseableHttpClient) {
396 ((CloseableHttpClient) client).close();
397 }
398 }
399 return result;
400 }
401
402 /**
403 * 创建 SSL连接
404 * @return
405 * @throws GeneralSecurityException
406 */
407 private static CloseableHttpClient createSSLInsecureClient() throws GeneralSecurityException {
408 try {
409 SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
410 public boolean isTrusted(X509Certificate[] chain,String authType) throws CertificateException {
411 return true;
412 }
413 }).build();
414
415 SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new X509HostnameVerifier() {
416
417 @Override
418 public boolean verify(String arg0, SSLSession arg1) {
419 return true;
420 }
421
422 @Override
423 public void verify(String host, SSLSocket ssl)
424 throws IOException {
425 }
426
427 @Override
428 public void verify(String host, X509Certificate cert)
429 throws SSLException {
430 }
431
432 @Override
433 public void verify(String host, String[] cns,
434 String[] subjectAlts) throws SSLException {
435 }
436
437 });
438
439 return HttpClients.custom().setSSLSocketFactory(sslsf).build();
440
441 } catch (GeneralSecurityException e) {
442 throw e;
443 }
444 }
445 public static void main(String[] args) throws Exception {
446 // Map<String,String> createMap = new HashMap<String,String>();
447 //
448 // createMap.put("authuser","*****");
449 // createMap.put("authpass","*****");
450 // createMap.put("orgkey","****");
451 // createMap.put("orgname","yonghuming");
452 // String result = HttpXmlClient.doPost("http",createMap);
453 // System.out.println(result);
454 // testUploadImage();
455 //HttpRequestUtil.sendGet("http", "response_type=code");
456 //sendGet("http", null);
457 String token = "duXxn2rUe_IvrqATWc_wLHY0Cct0AO5yJi4u3pNKxO5i4fsP_KrOAyKwDKbIlzWij2mtyOBpDq47DjFe0nkfC4qn1ICitz7zB10iaxViV9JdbJfBTgXz1OxPoKdTObOdAEFfAFDWAB";
458 String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+token +"&type=jsapi";
459
460 get(url, "UTF-8", 10000, 10000);
461 }
462 }