content: package com.jingewenku.abrahamcaijin.commonutil;
  
  import java.io.BufferedReader;
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.io.PrintWriter;
  import java.net.HttpURLConnection;
  import java.net.URL;
  
  /**
   * 主要功能：HttpURLConnection网络工具类
   *
   * @Prject: CommonUtilLibrary
   * @Package: com.jingewenku.abrahamcaijin.commonutil
   * @author: AbrahamCaiJin
   * @date: 2017年05月22日 14:13
   * @Copyright: 个人版权所有
   * @Company:
   * @version: 1.0.0
   */
  
  public class HttpURLConnectionUtils {
      private static final int TIMEOUT_IN_MILLIONS = 5000;
  
      public interface CallBack {
          void onRequestComplete(String result);
      }
  
      /**
       *   异步的Get请求 
       *   @param urlStr 
       *   @param callBack
       */
      public static void doGetAsyn(final String urlStr, final CallBack callBack) {
          new Thread() {
              public void run() {
                  try {
                      String result = doGet(urlStr);
                      if (callBack != null) {
                          callBack.onRequestComplete(result);
                      }
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              };
          }.start();
      }
  
      /**
       * 异步的Post请求
       * 
       * @param urlStr
       * 
       * @param params
       * 
       * @param callBack
       * 
       * @throws Exception
       */
      public static void doPostAsyn(final String urlStr, final String params,final CallBack callBack) throws Exception {
          new Thread() {
              public void run() {
                  try {
                      String result = doPost(urlStr, params);
                      if (callBack != null) {
                          callBack.onRequestComplete(result);
                      }
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              };
          }.start();
      }
  
      /**
       * Get请求，获得返回数据
       * @param urlStr
       * @return
       * @throws Exception
       */
      public static String doGet(String urlStr) {
          URL url = null;
          HttpURLConnection conn = null;
          InputStream is = null;
          ByteArrayOutputStream baos = null;
          try {
              url = new URL(urlStr);
              conn = (HttpURLConnection) url.openConnection();
              conn.setReadTimeout(TIMEOUT_IN_MILLIONS);
              conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);
              conn.setRequestMethod("GET");
              conn.setRequestProperty("accept", "*/*");
              conn.setRequestProperty("connection", "Keep-Alive");
              if (conn.getResponseCode() == 200) {
                  is = conn.getInputStream();
                  baos = new ByteArrayOutputStream();
                  int len = -1;
                  byte[] buf = new byte[128];
                  while ((len = is.read(buf)) != -1) {
                      baos.write(buf, 0, len);
                  }
                  baos.flush();
                  return baos.toString();
              } else {
                  throw new RuntimeException(" responseCode is  not 200 ... ");
              }
          } catch (Exception e) {
              e.printStackTrace();
          } finally {
              try {
  
                  if (is != null)
                      is.close();
              } catch (IOException e) {
  
              }
              try {
                  if (baos != null)
                      baos.close();
              } catch (IOException e) {
  
              }
              conn.disconnect();
          }
          return null;
      }
  
      /**
       * 向指定 URL 发送POST方法的请求
       * 
       * @param url
       *            发送请求的 URL
       * @param param
       *            请求参数，请求参数应该是 name1=value1&name2=value2 的形式
       * @return 代表远程资源的响应结果
       * @throws Exception
       */
      public static String doPost(String url, String param) {
          PrintWriter out = null;
          BufferedReader in = null;
          String result = "";
          try {
              URL realUrl = new URL(url); // 打开和URL之间的连接
              HttpURLConnection conn = (HttpURLConnection) realUrl
                      .openConnection(); // 设置通用的请求属性
              conn.setRequestProperty("accept", "*/*");
              conn.setRequestProperty("connection", "Keep-Alive");
              conn.setRequestMethod("POST");
              conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  // 设置内容类型
              conn.setRequestProperty("charset", "utf-8");   // 设置字符编码
              conn.setUseCaches(false); // 发送POST请求必须设置如下两行
              conn.setDoOutput(true); 
              conn.setDoInput(true);// 设置是否从httpUrlConnection读入，默认情况下是true;
              conn.setReadTimeout(TIMEOUT_IN_MILLIONS);        // 将读超时设置为指定的超时，以毫秒为单位。
              conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);	// 设置一个指定的超时值（以毫秒为单位）
              if (param != null && !param.trim().equals("")) { // 获取URLConnection对象对应的输出流
                  out = new PrintWriter(conn.getOutputStream()); // 发送请求参数
                  out.print(param);
                  // flush输出流的缓冲
                  out.flush();
              } 
              // 定义BufferedReader输入流来读取URL的响应
              in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
              String line;
              while ((line = in.readLine()) != null) {
                  result += line;
              }
          } catch (Exception e) {
              e.printStackTrace();
          } 
          // 使用finally块来关闭输出流和输入流
          finally {
              try {
                  if (out != null) {
                      out.close();
                  }
                  if (in != null) {
                      in.close();
                  }
              } catch (IOException ex) {
                  ex.printStackTrace();
              }
          }
          return result;
      }
  }