HttpUtils

package com.tmeos.xueliang.util;

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;

/**
 * @author 
 * @version V1.0
 * 
 *          Http请求的工具类
 */
public class HttpUtils
{

	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 );
			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;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值