你的位置:首页 > Java教程

[Java教程]Android Http请求


Android HTTP请求封装代码

/** * This class is the Utils of other classes. */public class HttpUtil {  /** 变量/常量说明 */  private static final String TAG       = "HttpUtils";  /** 超时时间 */  private static int     mTimeOut     = 20000;  /** 私钥密码 */  /** 使用协议 */  private static final String CLIENT_AGREEMENT = "TLS";  /** 密钥管理器 */  /** 变量/常量说明 */  private static HttpUtil   mHttpUtils    = null;  /**   * 获取HPPS对象实例   *   * @param application   * @return   * @since V1.0   */  public static HttpUtil getInstace(Context context) {    if (mHttpUtils == null) {      mHttpUtils = new HttpUtil(context);    }    return mHttpUtils;  }  /**   * @param application   */  private HttpUtil(Context context) {  }  /**   * 这里对方法做描述   *   * @param servAddr   * @param @return   * @throws HttpException   * @since V1.0   */  public String httpGetRequest(String servAddr) throws HttpException {    // create connection    String response = null;    HttpURLConnection conn = null;    boolean ret = false;    InputStream in = null;    try {      URL url = new URL(servAddr);      conn = (HttpURLConnection) url.openConnection();      conn.setConnectTimeout(mTimeOut);      conn.setReadTimeout(mTimeOut);      conn.setDoInput(true);      conn.setRequestMethod("GET");      conn.setRequestProperty("Content-type", "text/);      if (conn.getResponseCode() == 200) {        // getCookie(conn);        in = new BufferedInputStream(conn.getInputStream());      } else {        in = new BufferedInputStream(conn.getErrorStream());      }      response = inputStream2String(in);      in.close();      in = null;      ret = true;    } catch (MalformedURLException e) {      ret = false;      e.printStackTrace();    } catch (ProtocolException e) {      ret = false;      e.printStackTrace();    } catch (IOException e) {      ret = false;      e.printStackTrace();    } finally {      if (in != null) {        try {          in.close();        } catch (IOException e) {          // TODO Auto-generated catch block          e.printStackTrace();        }        in = null;      }      if (conn != null) {        // 断开连接        conn.disconnect();        conn = null;      }    }    // 抛出异常    if (!ret) {      throw new HttpException("network exception", HttpException.HTTP_NETWORD_EXCEPTION);    }    return response;  }  /**   * 这里对方法做描述   *   * @return   * @throws InvalidFormatException   * @see   * @since V1.0   */  public static String httpPostRequest(String path) {    // create connection    String response = null;    HttpURLConnection conn = null;    try {      URL url = new URL(path);      conn = (HttpURLConnection) url.openConnection();      conn.setConnectTimeout(mTimeOut);      conn.setDoInput(true);      conn.setDoOutput(true);      conn.setRequestMethod("POST");      conn.setRequestProperty("Content-type", "text/);      InputStream in = new BufferedInputStream(conn.getInputStream());      response = inputStream2String(in);    } catch (MalformedURLException e) {      e.printStackTrace();    } catch (ProtocolException e) {      e.printStackTrace();    } catch (IOException e) {      e.printStackTrace();    } catch (Exception e) {      e.printStackTrace();    } finally {      if (conn != null) {        // 断开连接        conn.disconnect();        conn = null;      }    }    return response;  }  /**   * httpPost方式   *   * @param servAddr   * @param @return   * @throws HttpException   * @since V1.0   */  public String httpPostRequest(String servAddr, String throws HttpException {    // create connection    String response = null;    HttpURLConnection conn = null;    boolean ret = false;    InputStream in = null;    DataOutputStream os = null;    try {      URL url = new URL(servAddr);      conn = (HttpURLConnection) url.openConnection();      conn.setConnectTimeout(mTimeOut);      conn.setReadTimeout(mTimeOut);      conn.setDoInput(true);      conn.setDoOutput(true);      conn.setRequestMethod("POST");      conn.setRequestProperty("Content-type", "text/);      // send       os = new DataOutputStream(conn.getOutputStream());      os.write(0, = null;      if (conn.getResponseCode() == 200) {        // getCookie(conn);        in = new BufferedInputStream(conn.getInputStream());      } else {        in = new BufferedInputStream(conn.getErrorStream());      }      response = inputStream2String(in);      in.close();      in = null;      ret = true;    } catch (MalformedURLException e) {      ret = false;      e.printStackTrace();    } catch (ProtocolException e) {      ret = false;      e.printStackTrace();    } catch (IOException e) {      ret = false;      e.printStackTrace();    } finally {      try {        if (in != null) {          in.close();        }        if (os != null) {          os.close();        }      } catch (IOException e) {        e.printStackTrace();      }      in = null;      if (conn != null) {        // 断开连接        conn.disconnect();        conn = null;      }    }    // 抛出异常    if (!ret) {      throw new HttpException("network exception", HttpException.HTTP_NETWORD_EXCEPTION);    }    return response;  }  /**   * 这里对方法做描述   *   * @return   * @throws HttpException   * @see   * @since V1.0   */  public String httpsGetRequest(String servHttpsAddr) {    if (servHttpsAddr == null || servHttpsAddr.equals("")) {      CLog.d(TAG, "sslGetRequest servHttpsAddr == null");      return "";    }    boolean bRet = verifyHttpsUrl(servHttpsAddr);    if (!bRet) {      CLog.d(TAG, "sslGetRequest verifyHttpsUrl fail");      return "";    }    String response = "";    try {      response = getSslRequest(servHttpsAddr);    } catch (HttpException e) {      e.printStackTrace();      CLog.d(TAG, "sslGetRequest verifyHttpsUrl fail");      return "";    }    return response;  }  /**   * httpsPost方式发送   *   * @return   * @throws HttpException   * @see   * @since V1.0   */  public String httpsPostRequest(String servHttpsAddr, String if (servHttpsAddr == null || servHttpsAddr.equals("")) {      CLog.d(TAG, "postHttpsRequest servHttpsAddr == null");      return "";    }    if (null || )) {      CLog.d(TAG, "postHttpsRequest );      return "";    }    boolean bRet = verifyHttpsUrl(servHttpsAddr);    if (!bRet) {      CLog.d(TAG, "postHttpsRequest verifyHttpsUrl fail");      return "";    }    String response = "";    try {      response = postSslRequest(servHttpsAddr, catch (HttpException e) {      e.printStackTrace();      CLog.d(TAG, "postHttpsRequest postSslRequest fail");      return "";    }    return response;  }  /**   * 把输入流转化成string   *   * @param is   * @return   * @see   * @since V1.0   */  private static String inputStream2String(InputStream is) {    InputStreamReader inputStreamReader = new InputStreamReader(is);    BufferedReader in = new BufferedReader(inputStreamReader);    StringBuffer buffer = new StringBuffer();    String line = "";    try {      while ((line = in.readLine()) != null) {        buffer.append(line);      }    } catch (IOException e) {      e.printStackTrace();    } finally {      try {        if (inputStreamReader != null) {          inputStreamReader.close();        }        inputStreamReader = null;        if (in != null) {          in.close();        }        in = null;      } catch (IOException e) {        e.printStackTrace();      }    }    return buffer.toString();  }  /**   * 这里对方法做描述   *   * @param servHttpsAddr   * @param @return   * @throws HttpException   * @since V1.0   */  private String getSslRequest(String servHttpsAddr) throws HttpException {    // create connection    String response = null;    HttpURLConnection conn = null;    boolean ret = false;    InputStream in = null;    try {      URL url = new URL(servHttpsAddr);      trustAllHosts();      conn = (HttpsURLConnection) url.openConnection();      ((HttpsURLConnection) conn).setHostnameVerifier(DO_NOT_VERIFY);// 不进行主机名确认      // ((HttpsURLConnection)      // conn).setSSLSocketFactory(getPushSSLSocketFactory());      conn.setConnectTimeout(mTimeOut);      conn.setReadTimeout(mTimeOut);      conn.setDoInput(true);      conn.setRequestMethod("GET");      conn.setRequestProperty("Content-type", "text/);      if (conn.getResponseCode() == 200) {        // getCookie(conn);        in = new BufferedInputStream(conn.getInputStream());      } else {        in = new BufferedInputStream(conn.getErrorStream());      }      response = inputStream2String(in);      in.close();      in = null;      ret = true;    } catch (MalformedURLException e) {      ret = false;      e.printStackTrace();    } catch (ProtocolException e) {      ret = false;      e.printStackTrace();    } catch (IOException e) {      ret = false;      e.printStackTrace();    }    // catch (NoSuchAlgorithmException e) {    // ret = false;    // e.printStackTrace();    // } catch (KeyManagementException e) {    // ret = false;    // e.printStackTrace();    // } catch (KeyStoreException e) {    // ret = false;    // e.printStackTrace();    // } catch (CertificateException e) {    // ret = false;    // e.printStackTrace();    // } catch (UnrecoverableKeyException e) {    // ret = false;    // e.printStackTrace();    // }    finally {      if (in != null) {        try {          in.close();        } catch (IOException e) {          // TODO Auto-generated catch block          e.printStackTrace();        }        in = null;      }      if (conn != null) {        // 断开连接        conn.disconnect();        conn = null;      }    }    // 抛出异常    if (!ret) {      throw new HttpException("network exception", HttpException.HTTP_NETWORD_EXCEPTION);    }    return response;  }  /**   * 验证https地址   *   * @since V1.0   */  public boolean verifyHttpsUrl(String httpsAddr) {    // TODO Auto-generated method stub    if (httpsAddr == null || httpsAddr.equals("")) {      CLog.e(TAG, "verifyHttpsUrl httpsAddr == null");      return false;    }    URL httpsUurl;    try {      httpsUurl = new URL(httpsAddr);    } catch (MalformedURLException e) {      // TODO Auto-generated catch block      e.printStackTrace();      CLog.e(TAG, "verifyHttpsUrl httpsAddr not url, error url:" + httpsAddr);      return false;    }    if (!httpsUurl.getProtocol().equalsIgnoreCase("https")) {      CLog.e(TAG, "verifyHttpsUrl httpsAddr not https, error url:" + httpsAddr);      return false;    }    return true;  }  /**   * post ssl请求   *   * @param servHttpsAddr   * @param @return   * @throws HttpException   * @since V1.0   */  private String postSslRequest(String servHttpsAddr, String throws HttpException {    // 回复信令    String response = null;    //    boolean ret = false;    // 输入流    InputStream in = null;    DataOutputStream os = null;    HttpsURLConnection httpsConn = null;    InputStream inputStream = null;    try {      URL url = new URL(servHttpsAddr);      // solution: javax.net.ssl.SSLException: Not trusted server      // certificate      trustAllHosts();      // 打开连接      httpsConn = (HttpsURLConnection) url.openConnection();      // 不进行主机名确认      httpsConn.setHostnameVerifier(DO_NOT_VERIFY);      httpsConn.setConnectTimeout(mTimeOut);      httpsConn.setReadTimeout(mTimeOut);      httpsConn.setDoInput(true);      httpsConn.setDoOutput(true);      httpsConn.setRequestMethod("POST");      httpsConn.setRequestProperty("Content-type","text/// send       os = new DataOutputStream(httpsConn.getOutputStream());      os.write(0, = null;      if (httpsConn.getResponseCode() == 200) {        // getCookie(conn);        inputStream = httpsConn.getInputStream();        in = new BufferedInputStream(inputStream);      } else {        inputStream = httpsConn.getErrorStream();        in = new BufferedInputStream(inputStream);      }      response = inputStream2String(in);      if (inputStream != null) {        inputStream.close();        inputStream = null;      }      in.close();      in = null;      ret = true;    } catch (MalformedURLException e) {      ret = false;      e.printStackTrace();    } catch (ProtocolException e) {      ret = false;      e.printStackTrace();    } catch (IOException e) {      ret = false;      e.printStackTrace();    } finally {      try {        if (inputStream != null) {          inputStream.close();        }        if (in != null) {          in.close();        }        in = null;        if (os != null) {          os.close();        }      } catch (IOException e) {        e.printStackTrace();      }      if (httpsConn != null) {        // 断开连接        httpsConn.disconnect();        httpsConn = null;      }    }    // 抛出异常    if (!ret) {      throw new HttpException("network exception", HttpException.HTTP_NETWORD_EXCEPTION);    }    return response;  }  /** always verify the host - dont check for certificate */  final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {                          public boolean verify(String hostname, SSLSession session) {                            return true;                          }                        };  /**   * Trust every server - dont check for any certificate   *   * @since V1.0   */  private static void trustAllHosts() {    // Create a trust manager that does not validate certificate chains    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {      public java.security.cert.X509Certificate[] getAcceptedIssuers() {        return new java.security.cert.X509Certificate[] {};      }      public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {      }      public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {      }    } };    // Install the all-trusting trust manager    try {      SSLContext sc = SSLContext.getInstance(CLIENT_AGREEMENT);      sc.init(null, trustAllCerts, new java.security.SecureRandom());      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());    } catch (Exception e) {      e.printStackTrace();    }  }  /**   * 在此对类做相应的描述 */  public static class _FakeX509TrustManager implements X509TrustManager {    /** 变量/常量说明 */    private static TrustManager[]     trustManagers;    /** 变量/常量说明 */    private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[] {};    @Override    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {    }    @Override    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {    }    /**     * 这里对方法做描述     *     * @param chain     * @return     * @since V1.0     */    public boolean isClientTrusted(X509Certificate[] chain) {      return true;    }    /**     * 这里对方法做描述     *     * @param chain     * @return     * @since V1.0     */    public boolean isServerTrusted(X509Certificate[] chain) {      return true;    }    /*     * (non-Javadoc)     * @see javax.net.ssl.X509TrustManager#getAcceptedIssuers()     */    @Override    public X509Certificate[] getAcceptedIssuers() {      return _AcceptedIssuers;    }    /**     * 这里对方法做描述     *     * @since V1.0     */    public static void allowAllSSL() {      HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {        @Override        public boolean verify(String hostname, SSLSession session) {          return true;        }      });      SSLContext context = null;      if (trustManagers == null) {        trustManagers = new TrustManager[] { new _FakeX509TrustManager() };      }      try {        context = SSLContext.getInstance(CLIENT_AGREEMENT);        if (context == null) {          return;        }        context.init(null, trustManagers, new SecureRandom());        SSLSocketFactory defaultSSLSocketFactory = context.getSocketFactory();        if (defaultSSLSocketFactory != null) {          HttpsURLConnection.setDefaultSSLSocketFactory(defaultSSLSocketFactory);        }      } catch (NoSuchAlgorithmException e) {        e.printStackTrace();      } catch (KeyManagementException e) {        e.printStackTrace();      }    }  }}