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 xmlBody
* @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/xml; charset=utf-8"); 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/xml; charset=utf-8"); 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 xmlBody
* @return
* @throws HttpException
* @since V1.0
*/
public String httpPostRequest(String servAddr, String xmlBody) 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/xml; charset=utf-8"); // send xml contant to server
os = new DataOutputStream(conn.getOutputStream());
os.write(xmlBody.getBytes(), 0, xmlBody.getBytes().length);
os.flush();
os.close();
os = 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 xmlBody) {
if (servHttpsAddr == null || servHttpsAddr.equals("")) {
CLog.d(TAG, "postHttpsRequest servHttpsAddr == null");
return "";
} if (xmlBody == null || xmlBody.equals("")) {
CLog.d(TAG, "postHttpsRequest xmlBody == null");
return "";
} boolean bRet = verifyHttpsUrl(servHttpsAddr);
if (!bRet) {
CLog.d(TAG, "postHttpsRequest verifyHttpsUrl fail");
return "";
} String response = "";
try {
response = postSslRequest(servHttpsAddr, xmlBody);
} 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 xmlBody
* @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/xml; charset=utf-8"); 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 xmlBody
* @return
* @throws HttpException
* @since V1.0
*/
private String postSslRequest(String servHttpsAddr, String xmlBody) 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/xml; charset=utf-8"); // send xml contant to server
os = new DataOutputStream(httpsConn.getOutputStream());
os.write(xmlBody.getBytes(), 0, xmlBody.getBytes().length);
os.flush();
os.close();
os = 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();
} }
}
}

Android Http请求的更多相关文章

  1. 浅论Android网络请求库——android-async-http

    在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Insta ...

  2. Android Http请求框架二:xUtils 框架网络请求

    一:对Http不了解的请看 Android Http请求框架一:Get 和 Post 请求 二.正文 1.xUtils 下载地址 github 下载地址  : https://github.com/w ...

  3. Android Http请求框架一:Get 和 Post 请求

    1.HttpUtil package com.app.android01; import java.io.BufferedReader; import java.io.IOException; imp ...

  4. Android之Http通信——3.Android HTTP请求方式:HttpURLConnection

    3.Android HTTP请求方式之HttpURLConnection 引言: 好了,前两节我们已经对HTTP协议进行了学习.相信看完前两节的朋友对HTTP协议相比之前 应该更加熟悉吧.好吧.学了要 ...

  5. Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

    最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所 ...

  6. xamarin android网络请求总结

    xamarin android中网络请求的框架非常多,在项目中使用的是第三方的一个网络请求框架restsharp,应该是github上.net网络请求最多star的框架,没有之一.这里就简单汇总了其他 ...

  7. Xamarin Android权限请求

    Xamarin Android权限请求   Android权限规定了App是否可以访问特定的资源,如网络.电话和短信.在原有API 6.0之前,App在安全的时候,会请求一次权限.一旦安装后,App就 ...

  8. Android 网络请求框架Retrofit

    Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp ...

  9. Android 网络请求及数据处理

    Android 网络请求: 1.Volley   http://blog.csdn.net/t12x3456/article/details/9221611 2.Android-Async-Http  ...

随机推荐

  1. maven nexus-staging-maven-plugin exception-connect timed out

    不知道是国内的网络的问题还是别的原因,在deploy一个maven的artifact到oss server的时候总是报错: Failed to execute goal org.sonatype.pl ...

  2. 关于Domino数据库的软删除

    在Domino的数据库属性的 “高级” 附签(选择文件->数据库->属性),选中“允许软删除”,这样我们就启用了软删除功能,当一个文档没有删除的时候我们可以使用NotesDatabase的 ...

  3. SQL迁移到ORACLE实例

    nohup ./command.sh > output 2>&1 & SQL迁移到ORACLE实例 日常运维中,我们经常会有数据库不同类型的迁移,比较多的就是从sql se ...

  4. SQL 性能调优日常积累【转】

    阅读目录 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效) (2)WHERE子句中的连接顺序 (3)SELECT子句中避免使用 ‘ * ‘ (4)减少访问数据库的次数 (5)在SQL*Plu ...

  5. 命令行的全文搜索工具--ack

    想必大家在命令行环境下工作时候,一定有想要查找当前目录下的源代码文件中的某些字符的需求,这时候如果使用传统方案,你可能需要输入一长串的命令,比如这样: 1. grep -R 'string' dir/ ...

  6. 给Number类型增加加法、减、乘、除函数,解决float相加结果精度错乱的问题

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. Navi.Soft30.产品.代码生成器.操作手册

    1系统简介 1.1功能简述 在Net软件开发过程中,大部分时间都是在编写代码,并且都是重复和冗杂的代码.比如:要实现在数据库中10个表的增删改查功能,大部分代码都是相同的,只需修改10%的代码量.此时 ...

  8. Discuz! 的编码规范

    http://open.discuz.net/?ac=document&page=dev_coderule 前言 本规范由编程原则组成,融合并提炼了开发人员长时间积累下来的成熟经验,意在帮助形 ...

  9. Difference between LET and LET* in Common LISP

    Difference between LET and LET* in Common LISP   LET   Parallel binding which means the bindings com ...

  10. jQuery Mobile Data 属性

    按钮 带有 data-role="button" 的超链接.button 元素.工具栏中的链接以及 input 字段都会自动渲染成按钮样式,不需要添加 data-role=&quo ...