`
zhelong111
  • 浏览: 188583 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HttpUtil工具类

 
阅读更多

/**
 * 增强型Http辅助类
 * @author zhouli
 *
 */
public class EnhancedHttpUtil { 
	
	private static HttpClient httpClient; 
	private static final String TAG = "HttpUtil";
	
	/**
	 * 获得线程安全的HttpClient对象,能够适应多线程环境
	 * @return
	 */
	public static synchronized HttpClient getHttpClient() {
        if (null == httpClient) {
            HttpParams params = new BasicHttpParams();
            // 设置一些基本参数
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(params,
                    "UTF-8");
            HttpProtocolParams.setUseExpectContinue(params, true);
            HttpProtocolParams
                    .setUserAgent(
                            params,
                            "Mozilla/5.0(Linux;U;Android 2.2.1;en-us;Nexus One Build.FRG83) "
                                    + "AppleWebKit/553.1(KHTML,like Gecko) Version/4.0 Mobile Safari/533.1");
            // 超时设置
            /* 从连接池中取连接的超时时间 */
            ConnManagerParams.setTimeout(params, 1000);
            /* 连接超时 */
            HttpConnectionParams.setConnectionTimeout(params, 1000);
            /* 请求超时 */
            HttpConnectionParams.setSoTimeout(params, 4000);
          
            // 设置我们的HttpClient支持HTTP和HTTPS两种模式
            SchemeRegistry schReg = new SchemeRegistry();
            schReg.register(new Scheme("http", PlainSocketFactory
                    .getSocketFactory(), 80));
            schReg.register(new Scheme("https", SSLSocketFactory
                    .getSocketFactory(), 443));

            // 使用线程安全的连接管理来创建HttpClient
            ClientConnectionManager conMgr = new ThreadSafeClientConnManager(
                    params, schReg);
            httpClient = new DefaultHttpClient(conMgr, params);
        }
        return httpClient;
    }
	
	/**
	 * 获得Post请求对象
	 * @param uri 请求地址,也可以带参数
	 * @param params 如果为null,则不添加由BasicNameValue封装的参数
	 * @return
	 */
	public static HttpPost getPost(String uri, List<BasicNameValuePair> params) {
		HttpPost post = new HttpPost(uri);
		try {
			if(params != null) {
				post.setEntity(new UrlEncodedFormEntity(params));
			}
		} catch (UnsupportedEncodingException e) { 
			e.printStackTrace();
		}
		return post;		
	}
	
	/**
	 * 用户使用的方法
	 * 功能:从服务器获得字符串
	 * @param post
	 * @return
	 */
	public static String getString(HttpPost post) {
		
		HttpClient httpClient = getHttpClient();
		HttpResponse response;
		try {
			response = httpClient.execute(post);
			if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
				post.abort();
				Log.v(TAG, "响应失败,请求终止.");
				return null;
			} 
			Log.v(TAG, "响应成功.");
			return EntityUtils.toString(response.getEntity());
		} catch (ClientProtocolException e) { 
			e.printStackTrace();
			Log.e(TAG, e.getMessage());
			return null;
		} catch (IOException e) { 
			e.printStackTrace();
			Log.e(TAG, e.getMessage());
			return null;
		} 
	}
	
	/**
	 * 用户使用的方法
	 * 功能:请求服务器,返回字符串
	 * @param post post 请求对象
	 * @param requestLimit 请求失败限制次数
	 * @return
	 */
	public static String getString(HttpPost post, int requestLimit) {
		
		if (requestLimit < 1) {
			return null;
		}
		HttpResponse response;
		int currCount = 0; // 当前请求次数
		String result = null;
		
		while (currCount < requestLimit) {
			
			HttpClient httpClient = getHttpClient();
			currCount++;
			try {
				response = httpClient.execute(post);
				if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
					Log.v(TAG, "响应成功.");
					return EntityUtils.toString(response.getEntity());
				} else {
					post.abort();
					Log.v(TAG, "响应失败,请求终止."); 
					result = "响应失败,请求终止.";
				} 
			} catch (ClientProtocolException e) {  
				Log.e(TAG, e.getMessage());
				if (currCount > requestLimit) {
					result = "请求失败."; 
					break;
				} 
				System.out.println("ClientProtocolException");
			} catch (IOException e) {  
				Log.e(TAG, e.getMessage());
				if (e instanceof ConnectTimeoutException) {
					result = "连接超时.";
				} else {
					result = "IO异常.";
				}
				if (currCount > requestLimit) {	
					break;
				}
				System.out.println("IOException");
			} finally {
				System.out.println("finally"); 
			}
		}
		return result;
	}
	
	/**
	 * 用户使用的方法
	 * 功能:请求服务器,返回字符串
	 * @param uri 字符串形式的请求地址
	 * @param requestLimit 最多允许的请求失败次数
	 * @return
	 */
	public static String getString(String uri, int requestLimit) {   
		
		if (requestLimit < 1) {
			return null;
		}
		HttpResponse response;
		int currCount = 0; // 当前请求次数
		String result = null;
		HttpPost post = getPost(uri, null);
		while (currCount < requestLimit) {
			
			HttpClient httpClient = getHttpClient();
			currCount++;
			try {
				response = httpClient.execute(post);
				if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
					Log.v(TAG, "响应成功.");
					return EntityUtils.toString(response.getEntity());
				} else {
					post.abort();
					Log.v(TAG, "响应失败,请求终止."); 
					result = "响应失败,请求终止.";
				} 
			} catch (ClientProtocolException e) {  
				Log.e(TAG, e.getMessage());
				if (currCount > requestLimit) {
					result = "请求失败."; 
					break;
				} 
				System.out.println("ClientProtocolException");
			} catch (IOException e) {  
				//Log.e(TAG, e.getMessage());
				if (e instanceof ConnectTimeoutException) {
					result = "连接超时.";
				} else {
					result = "IO异常.";
				}
				if (currCount > requestLimit) {	
					break;
				}
				//System.out.println("IOException");
			} finally {
				System.out.println("finally"); 
			}
		}
		return result;
	}
	
	/**
	 * 释放建立http请求占用的资源
	 */
	public static void shutdown() { 
		// 释放建立http请求占用的资源
		httpClient.getConnectionManager().shutdown();
		httpClient = null;
	}
}



使用范例:
package com.laili;

import java.util.ArrayList;
import java.util.List; 
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair; 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; 
import com.laili.util.HttpUtil;

public class HttpUtilActivity extends Activity {
   
	private Button btn;
	private EditText show;
	private String uri = "http://10.2.105.76:8080/json/TestJsonServlet";
	private List<BasicNameValuePair> params;
    private Handler handler;
    private String showStr = "";
    
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        params = new ArrayList<BasicNameValuePair>();
        
        handler = new Handler() {
        	@Override
        	public void handleMessage(Message msg) {
        		switch (msg.what) {
        		case 0x01:
        			show.setText(showStr); 
        			break;
        		}
        	}
        };
        
        show = (EditText) findViewById(R.id.editText1);
        btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				new Thread(){
					public void run() { 
						params.add(new BasicNameValuePair("username", "zhelong"));
						params.add(new BasicNameValuePair("password", "123456"));
						HttpPost post = HttpUtil.getPost(uri, params);
						showStr += HttpUtil.getString(post,3); 
						//System.out.println(response);
						handler.sendEmptyMessage(0x01);
					};
				}.start();
			}
		});
    }
}
分享到:
评论
1 楼 smith789 2016-04-28  
使用的类都废弃了

相关推荐

    HttpUtil工具类,支持POST,GET,HTTP,HTTPS

    用于HTTP请求的工具类,支持GET,POST,HTTP,HTTPS 代码简单易懂

    httputil工具类

    `httputil`工具类是Java编程中常见的一种实用工具,主要用于简化HTTP请求的发送与响应的处理。在Web开发中,我们常常需要与服务器进行交互,获取或发送数据,这时`HttpUtils`就显得非常方便。下面将详细介绍`...

    httpUtil工具类

    http连接请求,可以支持请求get,post方式请求表单,支持上传文件

    HttpUtils 发送http请求工具类(实例讲解)

    该工具类提供了多种方法来发送 GET、POST、PUT、DELETE 等请求,并且支持设置超时时间、代理服务器、证书验证等功能。 关键代码分析 在 HttpUtils 工具类中,有一些关键的代码需要特别注意: 1. `init()` 方法:...

    HttpUtil,支持data-form、SSL等

    3. **所有jar包包含在内**:在提供的压缩文件中,`HttpUtil` 包含了所有必要的jar包,这意味着开发者无需额外下载其他依赖,可以直接在项目中使用这个工具类。这些jar包可能包含了HTTP客户端库(如Apache HttpClient...

    Base64Util、FileUtil、GsonUtils、HttpUtil

    HttpUtil工具类主要用于处理HTTP请求和响应,它简化了网络通信过程。开发者可以利用HttpUtil发送GET、POST等请求,设置请求头,处理响应数据等。这个工具类通常会包含如`sendGetRequest`和`sendPostRequest`这样的...

    httpUtil httpclient 登陆携带cookie访问下一个连接

    在这个过程中,`HttpUtil.java`可能是一个自定义的工具类,包含了使用`httpclient`进行HTTP操作的实用方法。它可能会包含创建`HttpClient`、构建请求、解析响应等功能,简化了代码的复用和维护。 总之,`httpclient...

    HttpUtil工具包

    在IT行业中,工具类是程序员经常使用的一种设计模式,它封装了特定功能,方便在项目中重复使用。这里提到的"HttpUtil工具包"显然是一款针对HTTP网络请求的实用工具,它提供了对字符串和图片处理的功能。让我们深入...

    Java Http工具类HttpClientUtil

    多年积累,功能比较强大,可设置路由连接数,时间,请求类型包括get,post, 参数包括urlcode,map,json,xml。注释很清楚。

    文件处理与图片处理工具类

    最后,HttpUtil工具类主要用于HTTP请求的发送和响应的接收。在网络编程中,我们经常需要向服务器发送GET、POST等HTTP请求获取数据,或者提交数据。HttpUtil可能包含了发起请求、设置请求头、处理响应等功能,使得...

    一款参考QQ、微信的即时通讯软件 采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发(源码)

    c 一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于...客户端准备:进入App.xaml.cs文件配置服务端的IP地址,同时在HttpUtil工具类中接入AI机器人接口、短信验证服务接口等,正确地配置SocketUtil中的连接。

    HttpClient 4.5 封装的工具类 HttpUtil 可用于爬虫和模拟登陆

    基于Apache HttpClient 4.5.2 封装的工具类 HttpUtil 可用于爬虫和模拟登陆。使用新的语法后比3.*版本的速度感觉有提升。使用后注意资源的释放 pom 部分,应该不全,需要用的根据代码的import去找maven资源即可。 ...

    HttpUtil.java时间工具类

    日期与时间的相互转换,日期与时间戳的相互转换的一个工具类。

    SHA1 HttpUtil UrlUtil工具类

    java 处理微信客服推送校验token所用到的工具类 使用方法:hashcode = SHA1.gen(token, timestamp, nonce) String res = ""; if (hashcode.equals(signature)) { res = echostr; } return res;

    HttpUtil-ssl请求工具

    请求http工具 支持ssl,请求参数支持json数据和map数据,能自动转换编码),不必担心返回数据乱码

    Http工具类HttpUtil.java

    Http工具类HttpUtil.java:这个文件是工作用到的工具类,上传上来以后自己用到或者有同学也需要。 maven项目添加如下的jar包依赖,文件放到项目中修改一下package就可以直接使用了。 &lt;groupId&gt;org.apache....

    httpUtil类

    网络请求工具类

    HTTP请求客户端工具类RestTemplateUtil.java

    org.springframework.web.client.AsyncRestTemplate org.springframework.web.client.RestTemplate HTTP请求工具类,基于以上两个Rest请求工具模板完成封装HTTP请求,包括同步和异步请求的实现。

Global site tag (gtag.js) - Google Analytics