HttpPostUtil.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. package com.minpay.common.util;
  2. import java.io.BufferedReader;
  3. import java.io.DataOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStream;
  9. import java.io.OutputStreamWriter;
  10. import java.io.PrintWriter;
  11. import java.net.HttpURLConnection;
  12. import java.net.URL;
  13. import java.net.URLConnection;
  14. import java.net.URLEncoder;
  15. import java.security.KeyStore;
  16. import java.util.Map;
  17. import javax.net.ssl.SSLContext;
  18. import org.apache.http.HttpEntity;
  19. import org.apache.http.HttpResponse;
  20. import org.apache.http.client.config.RequestConfig;
  21. import org.apache.http.client.methods.HttpPost;
  22. import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
  23. import org.apache.http.conn.ssl.SSLContexts;
  24. import org.apache.http.entity.StringEntity;
  25. import org.apache.http.impl.client.CloseableHttpClient;
  26. import org.apache.http.impl.client.HttpClients;
  27. import org.apache.http.util.EntityUtils;
  28. import net.sf.json.JSONObject;
  29. /**
  30. * 发送请求
  31. * @author Zhumq
  32. *
  33. */
  34. public class HttpPostUtil {
  35. /**
  36. * 发送get请求
  37. * @param url
  38. * @param param "a=111&b=123"
  39. * @return
  40. */
  41. public static String sendGet(String url,String param){
  42. String result = "";
  43. try{
  44. String urlName = url + "?"+param;//
  45. URL U = new URL(urlName);
  46. URLConnection connection = U.openConnection();
  47. connection.connect();
  48. BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
  49. String line;
  50. while ((line = in.readLine())!= null){
  51. result += line;
  52. }
  53. in.close();
  54. }catch(Exception e){
  55. System.out.println("error!!"+e);
  56. }
  57. return result;
  58. }
  59. /**
  60. * 发送post请求
  61. * @param url
  62. * @param param "a=111&b=123"
  63. * @return
  64. */
  65. public static String sendPost(String url, String param){
  66. String result = "";
  67. try{
  68. URL httpurl = new URL(url);
  69. HttpURLConnection httpConn = (HttpURLConnection)httpurl.openConnection();
  70. httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  71. httpConn.setDoOutput(true);
  72. httpConn.setDoInput(true);
  73. PrintWriter out = new PrintWriter(httpConn.getOutputStream());
  74. out.print(param);
  75. out.flush();
  76. out.close();
  77. BufferedReader in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"));
  78. String line;
  79. while ((line = in.readLine())!= null){
  80. result += line;
  81. }
  82. in.close();
  83. }catch(Exception e){
  84. System.out.println("error!!"+e);
  85. }
  86. System.out.println("result:"+result);
  87. return result;
  88. }
  89. public static String sendPostRequest(String url, Map param, String user, String pass){
  90. String result = "";
  91. try{
  92. URL httpurl = new URL(url);
  93. HttpURLConnection httpConn = (HttpURLConnection)httpurl.openConnection();
  94. httpConn.setRequestProperty("Authorization", "Basic " + Base64.encode((user+":"+pass).getBytes()));
  95. httpConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
  96. httpConn.setDoOutput(true);
  97. httpConn.setDoInput(true);
  98. PrintWriter out = new PrintWriter(httpConn.getOutputStream());
  99. out.print(com.alibaba.fastjson.JSONObject.toJSONString(param));
  100. out.flush();
  101. out.close();
  102. BufferedReader in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"));
  103. String line;
  104. while ((line = in.readLine())!= null){
  105. result += line;
  106. }
  107. in.close();
  108. }catch(Exception e){
  109. System.out.println("error!!"+e);
  110. }
  111. System.out.println("result:"+result);
  112. return result;
  113. }
  114. /**
  115. * 发送post请求(推货专用)
  116. * @param url
  117. * @param param "a=111&b=123"
  118. * @return
  119. */
  120. public static String sendPostFormachine(String url, String param){
  121. String result = "";
  122. try{
  123. param = URLEncoder.encode(param, "utf-8");
  124. URL httpurl = new URL(url);
  125. HttpURLConnection httpConn = (HttpURLConnection)httpurl.openConnection();
  126. httpConn.setDoOutput(true);
  127. httpConn.setDoInput(true);
  128. // 设置传递方式
  129. httpConn.setRequestMethod("POST");
  130. // 设置维持长连接
  131. httpConn.setRequestProperty("Connection", "Keep-Alive");
  132. // 设置文件字符集:
  133. httpConn.setRequestProperty("Charset", "UTF-8");
  134. // 转换为字节数组
  135. //byte[] data = ("formData=" + param.toString()).getBytes();
  136. byte[] data = (param.toString()).getBytes();
  137. // 设置文件长度
  138. httpConn.setRequestProperty("Content-Length", CommonUtil.objToString(data.length));
  139. // 设置文件类型:
  140. httpConn.setRequestProperty("contentType", "application/json");
  141. // PrintWriter out = new PrintWriter(httpConn.getOutputStream());
  142. // out.print(param.getBytes());
  143. // out.flush();
  144. // out.close();
  145. OutputStream out = new DataOutputStream(httpConn.getOutputStream()) ;
  146. // 写入请求的字符串
  147. out.write((param.toString()).getBytes());
  148. out.flush();
  149. out.close();
  150. BufferedReader in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"));
  151. String line;
  152. while ((line = in.readLine())!= null){
  153. result += line;
  154. }
  155. in.close();
  156. }catch(Exception e){
  157. System.out.println("error!!"+e);
  158. }
  159. System.out.println("result:"+result);
  160. return result;
  161. }
  162. private final static int CONNECT_TIMEOUT = 5000; // in milliseconds
  163. private final static String DEFAULT_ENCODING = "UTF-8";
  164. private static int socketTimeout = 10000;// 连接超时时间,默謿10祿
  165. private static int connectTimeout = 30000;// 传输超时时间,默謿30祿
  166. private static RequestConfig requestConfig;// 请求器的配置
  167. private static CloseableHttpClient httpClient;// HTTP请求嗿
  168. public static String postData(String urlStr, String data){
  169. return postData(urlStr, data, null);
  170. }
  171. public static String postData(String urlStr, String data, String contentType){
  172. BufferedReader reader = null;
  173. try {
  174. URL url = new URL(urlStr);
  175. URLConnection conn = url.openConnection();
  176. conn.setDoOutput(true);
  177. conn.setConnectTimeout(CONNECT_TIMEOUT);
  178. conn.setReadTimeout(CONNECT_TIMEOUT);
  179. if(contentType != null)
  180. conn.setRequestProperty("content-type", contentType);
  181. OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(), DEFAULT_ENCODING);
  182. if(data == null)
  183. data = "";
  184. writer.write(data);
  185. writer.flush();
  186. writer.close();
  187. reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), DEFAULT_ENCODING));
  188. StringBuilder sb = new StringBuilder();
  189. String line = null;
  190. while ((line = reader.readLine()) != null) {
  191. sb.append(line);
  192. sb.append("\r\n");
  193. }
  194. return sb.toString();
  195. } catch (IOException e) {
  196. e.printStackTrace();
  197. } finally {
  198. try {
  199. if (reader != null)
  200. reader.close();
  201. } catch (IOException e) {
  202. }
  203. }
  204. return null;
  205. }
  206. /**
  207. * 通过Https弿API post xml数据
  208. *
  209. * @param url API地址
  210. * @param xmlObj 要提交的XML数据对象
  211. * @param mchId 商户ID
  212. * @param certPath 证书位置
  213. * @return
  214. */
  215. public static String postData(String url, String xmlObj, String mchId, String certPath) {
  216. // 加载证书
  217. try {
  218. initCert(mchId, certPath);
  219. } catch (Exception e) {
  220. e.printStackTrace();
  221. }
  222. String result = null;
  223. HttpPost httpPost = new HttpPost(url);
  224. // 得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别
  225. StringEntity postEntity = new StringEntity(xmlObj, "UTF-8");
  226. httpPost.addHeader("Content-Type", "text/xml");
  227. httpPost.setEntity(postEntity);
  228. // 根据默认超时限制初始化requestConfig
  229. requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();
  230. // 设置请求器的配置
  231. httpPost.setConfig(requestConfig);
  232. try {
  233. HttpResponse response = null;
  234. try {
  235. response = httpClient.execute(httpPost);
  236. } catch (IOException e) {
  237. e.printStackTrace();
  238. }
  239. HttpEntity entity = response.getEntity();
  240. try {
  241. result = EntityUtils.toString(entity, "UTF-8");
  242. } catch (IOException e) {
  243. e.printStackTrace();
  244. }
  245. } finally {
  246. httpPost.abort();
  247. }
  248. return result;
  249. }
  250. /**
  251. * 加载证书
  252. *
  253. * @param mchId 商户ID
  254. * @param certPath 证书位置
  255. * @throws Exception
  256. */
  257. private static void initCert(String mchId, String certPath) throws Exception {
  258. // 证书密码,默认为商户ID
  259. String key = mchId;
  260. // 证书的路弿
  261. String path = certPath;
  262. // 指定读取证书格式为PKCS12
  263. KeyStore keyStore = KeyStore.getInstance("PKCS12");
  264. // 读取本机存放的PKCS12证书文件
  265. FileInputStream instream = new FileInputStream(new File(path));
  266. try {
  267. // 指定PKCS12的密瞿(商户ID)
  268. keyStore.load(instream, key.toCharArray());
  269. } finally {
  270. instream.close();
  271. }
  272. SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, key.toCharArray()).build();
  273. SSLConnectionSocketFactory sslsf =
  274. new SSLConnectionSocketFactory(sslcontext, new String[] {"TLSv1"}, null,
  275. SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
  276. httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
  277. }
  278. }