android网络请求工具类

package com.example.util;



import java.io.BufferedReader;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.UnsupportedEncodingException;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.ProtocolException;

import java.net.URI;

import java.net.URL;

import java.net.URLEncoder;

import java.security.KeyManagementException;

import java.security.NoSuchAlgorithmException;

import java.security.cert.X509Certificate;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;



import javax.net.ssl.HostnameVerifier;

import javax.net.ssl.HttpsURLConnection;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLSession;

import javax.net.ssl.TrustManager;

import javax.net.ssl.X509TrustManager;



import org.apache.http.HttpResponse;

import org.apache.http.HttpStatus;

import org.apache.http.NameValuePair;

import org.apache.http.client.HttpClient;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.message.BasicNameValuePair;



import android.content.Context;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.net.ConnectivityManager;

import android.net.NetworkInfo;

import android.util.Log;



/**

 * 网络连接辅助类

 *项目名称:xxxxxxxx

 * 

 * @author zhangjie

 * 

 */

public class HttpUtil {

	private static final String TAG = "HttpUtil";



	/** 连接超时 */

	private static final int TIME_OUT = 5 * 1000;



	/**

	 * 发送post请求

	 * 

	 * @param strUrl

	 *            网址路径

	 * @param map

	 *            请求的参数

	 * @return 返回请求的结果

	 */

	public static String executePost(String strUrl, Map<String, String> map) {

		String result = null;

		BufferedReader reader = null;

		try {

			HttpClient client = new DefaultHttpClient();

			// HttpPost连接对象

			HttpPost request = new HttpPost();

			request.setURI(new URI(strUrl));



			// 使用NameValuePair来保存要传递的Post参数

			List<NameValuePair> postParameters = new ArrayList<NameValuePair>();

			if (null != map) {

				for (Map.Entry<String, String> entry : map.entrySet()) {

					Log.i(TAG, entry.getKey() + "=>" + entry.getValue());

					postParameters.add(new BasicNameValuePair(entry.getKey(),

							entry.getValue()));

				}

			}

			// 设置字符集

			UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(

					postParameters, "utf-8");

			request.setEntity(formEntity);



			HttpResponse response = client.execute(request);

			// HttpStatus.SC_OK表示连接成功

			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

				Log.i(TAG, "连接成功,连接状态码为:"

						+ response.getStatusLine().getStatusCode());

				reader = new BufferedReader(new InputStreamReader(response

						.getEntity().getContent()));



				StringBuffer strBuffer = new StringBuffer("");

				String line = null;

				while ((line = reader.readLine()) != null) {

					strBuffer.append(line);

				}

				result = strBuffer.toString();

				Log.i(TAG, result);

			} else {

				Log.i(TAG, "连接失败,连接状态码为:"

						+ response.getStatusLine().getStatusCode());

			}

		} catch (Exception e) {

			e.printStackTrace();

		} finally {

			if (reader != null) {

				try {

					reader.close();

					reader = null;

				} catch (IOException e) {

					e.printStackTrace();

				}

			}

		}

		return result;

	}



	/**

	 * 发送post请求

	 * 

	 * @param urlAddress

	 *            请求的路径

	 * @param map

	 *            请求的参数

	 * @return 返回请求后的结果

	 * @throws AccessUrlException

	 */

	public static String executeHttpPost(Context context, String urlAddress,

			Map<String, String> map) throws AccessUrlException,

			AccessTimeOutException {

		try {

			initSSL();

		} catch (KeyManagementException e1) {

			e1.printStackTrace();

		} catch (NoSuchAlgorithmException e1) {

			e1.printStackTrace();

		}

		SharedPreferences sharedPreferences = context.getSharedPreferences(

				"YinYiTong", Context.MODE_PRIVATE);

		String result = null;

		URL url = null;

		HttpURLConnection connection = null;

		InputStreamReader in = null;



		try {

			url = new URL(urlAddress);



			connection = (HttpURLConnection) url.openConnection();

			connection.setConnectTimeout(TIME_OUT);

			connection.setDoInput(true);// 使用 URL连接进行输入

			connection.setDoOutput(true);// 使用 URL连接进行输出

			connection.setUseCaches(false);// 忽略缓存

			connection.setRequestMethod("POST");

			connection.setRequestProperty("Content-Type",

					"application/x-www-form-urlencoded");

			connection.setRequestProperty("Charset", "utf-8");



			// session id

			String sessionId = sharedPreferences.getString("sessionId", "");

			if (!(sessionId==null)) {

				connection.setRequestProperty("Cookie", sessionId);



			}



			StringBuilder params = new StringBuilder();

			// 设置参数

			if (null != map) {

				for (Map.Entry<String, String> entry : map.entrySet()) {

					Log.i(TAG, entry.getKey() + "=>" + entry.getValue());

					params.append(entry.getKey());

					params.append("=");

					params.append(URLEncoder.encode(entry.getValue(), "utf-8"));

					params.append("&");

				}

			}

			if (params.length() > 0)

				params.deleteCharAt(params.length() - 1);



			OutputStream outputStream = null;

			try {

				outputStream = connection.getOutputStream();

			} catch (Exception e) {

				Log.w(TAG, "访问服务器地址:" + urlAddress + "超时.");

				throw new AccessTimeOutException("访问服务器地址:" + urlAddress

						+ "超时.");

			}



			DataOutputStream dop = new DataOutputStream(outputStream);

			dop.write(params.toString().getBytes());

			dop.flush();

			dop.close();



			if (connection.getResponseCode() == HttpStatus.SC_OK) {

				Log.i(TAG, "connection status is 200");

				// 获取返回结果

				in = new InputStreamReader(connection.getInputStream());

				BufferedReader bufferedReader = new BufferedReader(in);

				StringBuffer strBuffer = new StringBuffer();

				String line = null;

				while ((line = bufferedReader.readLine()) != null) {

					strBuffer.append(line);

				}

				result = strBuffer.toString();

				Log.i(TAG, result);



				// session id不同,重新设置

				String session_value = connection.getHeaderField("Set-Cookie");

				if (!(session_value==null)) {

					String[] sessionIds = session_value.split(";");

					Log.i(TAG, "sessionId=" + sessionIds[0]);

					if (null != sessionIds[0]

							&& !sessionIds[0].equalsIgnoreCase(sessionId)) {

						Editor editor = sharedPreferences.edit();

						editor.putString("sessionId", sessionIds[0]);

						editor.commit();

					}

				}

			} else {

				Log.w(TAG, "访问服务器异常,状态码为:" + connection.getResponseCode());

				throw new AccessUrlException("访问服务器异常,状态码为:"

						+ connection.getResponseCode());

			}

		} catch (MalformedURLException e) {

			Log.e(TAG, "[executeHttpPost]:", e);

		} catch (ProtocolException e) {

			Log.e(TAG, "[executeHttpPost]:", e);

		} catch (UnsupportedEncodingException e) {

			Log.e(TAG, "[executeHttpPost]:", e);

		} catch (IOException e) {

			Log.e(TAG, "[executeHttpPost]:", e);

		} finally {

			if (connection != null) {

				connection.disconnect();

			}

			if (in != null) {

				try {

					in.close();

				} catch (IOException e) {

					Log.e(TAG, "[executeHttpPost]InputStreamReader关闭异常:", e);

				}

			}

		}

		return result;

	}



	/**

	 * 接受任何证书,不考虑证书发行者及所在主机情况

	 * 

	 * @throws NoSuchAlgorithmException

	 * @throws KeyManagementException

	 */

	public static void initSSL() throws NoSuchAlgorithmException,

			KeyManagementException {

		// Create a trust manager that does not validate certificate chains

		TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {

			public X509Certificate[] getAcceptedIssuers() {

				return null;

			}



			public void checkClientTrusted(X509Certificate[] certs,

					String authType) {

				// Trust always

			}



			public void checkServerTrusted(X509Certificate[] certs,

					String authType) {

				// Trust always

			}

		} };



		// Install the all-trusting trust manager

		SSLContext sc = SSLContext.getInstance("SSL");

		// Create empty HostnameVerifier

		HostnameVerifier hv = new HostnameVerifier() {

			public boolean verify(String arg0, SSLSession arg1) {

				return true;

			}

		};



		sc.init(null, trustAllCerts, new java.security.SecureRandom());

		HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

		HttpsURLConnection.setDefaultHostnameVerifier(hv);

	}



	/**

	 * 检查网络连接

	 * 

	 * @param context

	 * @return 有可用的接连返回true,否则返回false

	 */

	public static boolean hasNetwork(Context context) {

		ConnectivityManager con = (ConnectivityManager) context

				.getSystemService(Context.CONNECTIVITY_SERVICE);

		NetworkInfo workinfo = con.getActiveNetworkInfo();

		if (workinfo == null || !workinfo.isAvailable()) {

			Log.w(TAG, "当前无网络连接......");

			return false;

		}

		return true;

	}



	@SuppressWarnings("serial")

	public static class AccessUrlException extends Exception {

		public AccessUrlException() {

			super();

		}



		public AccessUrlException(String msg) {

			super(msg);

		}



		@Override

		public String toString() {

			return super.toString();

		}

	}



	@SuppressWarnings("serial")

	public static class AccessTimeOutException extends Exception {

		public AccessTimeOutException() {

			super();

		}



		public AccessTimeOutException(String msg) {

			super(msg);

		}



		@Override

		public String toString() {

			return super.toString();

		}

	}

}

  

你可能感兴趣的:(android)