HttpClient 框架的简单封装

来源:互联网 发布:淘宝详情可以改动吗 编辑:程序博客网 时间:2024/05/22 15:42

package com.example.utilsdemo.utils;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
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.conn.ClientConnectionManager;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

public class HttpUtils {

//对最后需要的处理的结果进行回调处理public OnResponseListener mListener;//构造方法实现监听接口 处理返回的结果public HttpUtils(OnResponseListener listener){    this.mListener = listener;}//回调接口 成功返回json字符串 失败返回响应码errorcodepublic interface OnResponseListener{    void success(String result);    void error(String error);}//reuquest请求 进行post请求 参数 url 请求参数的集合public void request(List<BasicNameValuePair>    paramsList, String strUrl) {    HttpPost request = new HttpPost(strUrl);    List<NameValuePair> params = new ArrayList<NameValuePair>();    if(paramsList == null || paramsList.size() <= 0){        return;    }    for(int i = 0; i < paramsList.size(); i++){        params.add(paramsList.get(i));    }    String responseMsg = "";    try {        request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));        HttpClient client = HttpClientManager.getHttpClient();        HttpResponse response = client.execute(request);        if (response.getStatusLine().getStatusCode() == 200) {            responseMsg = EntityUtils.toString(response.getEntity());            mListener.success(responseMsg);        }else{            mListener.error(response.getStatusLine().getStatusCode()+"");        }    } catch (Exception e) {        e.printStackTrace();    }}

//得到httpClient的Manager类
private static class HttpClientManager {
private static HttpClient customerHttpClient;
private static final int REQUEST_TIMEOUT = 5 * 1000;
private static final int SO_TIMEOUT = 5 * 1000;
private static final String CHARSET = HTTP.UTF_8;

    private HttpClientManager() {    }    public static  HttpClient getHttpClient2() {        if (null == customerHttpClient) {            BasicHttpParams httpParams = new BasicHttpParams();            HttpConnectionParams.setConnectionTimeout(httpParams,REQUEST_TIMEOUT);            HttpConnectionParams.setSoTimeout(httpParams, SO_TIMEOUT);            customerHttpClient = new DefaultHttpClient(httpParams);        }        return customerHttpClient;    }    public static synchronized HttpClient getHttpClient(){          if(customerHttpClient == null){              HttpParams params = new BasicHttpParams();              //设置基本参数              HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);              HttpProtocolParams.setContentCharset(params, CHARSET);              HttpProtocolParams.setUseExpectContinue(params, true);              //超时设置              /*从连接池中取连接的超时时间*/              ConnManagerParams.setTimeout(params, REQUEST_TIMEOUT);              /*连接超时*/              HttpConnectionParams.setConnectionTimeout(params, REQUEST_TIMEOUT);              /*请求超时*/              HttpConnectionParams.setSoTimeout(params, REQUEST_TIMEOUT);              //设置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);              customerHttpClient = new DefaultHttpClient(conMgr, params);          }          return customerHttpClient;      } }

}

0 0
原创粉丝点击