【Android基础】-基于Apache HttpClient封装的网络操作工具类

引言

Http协议的重要性不用多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,使客户端发送Http请求变得容易。我们需要用到两个jar包:httpmime-4.3.5.jar,httpcore-4.3.2.jar
下载地址:httpmime-4.3.5.jarhttpcore-4.3.2.jar


GET请求

public static String get(String url, Map<String, String> params) {
        try {
            String realUrl = generateUrl(url, params);
            HttpClient client = getHttpClient();
            HttpGet getMethod = new HttpGet(realUrl);
            HttpResponse response = client.execute(getMethod);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                StringBuilder builder = new StringBuilder();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(response.getEntity().getContent()));
                for (String s = reader.readLine(); s != null; s = reader
                        .readLine()) {
                    builder.append(s);
                }
                String result = builder.toString();
                return result;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

1)获取HttpClient的代码如下,其中设置了连接超时和读取超时

private final static int CONNET_TIMEOUT = 30 * 1000;
private final static int READ_TIMEOUT = 30 * 1000;

public static HttpClient getHttpClient() {
        BasicHttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, CONNET_TIMEOUT);
        HttpConnectionParams.setSoTimeout(httpParams, READ_TIMEOUT);
        HttpClient httpClient = new DefaultHttpClient(httpParams);
        return httpClient;
    }

2)根据基础url和请求参数拼接请求链接代码如下:

private static String generateUrl(String url, Map<String, String> params) {
        StringBuilder urlBuilder = new StringBuilder(url);
        if (null != params) {
            urlBuilder.append("?");
            Iterator<Entry<String, String>> iterator = params.entrySet()
                    .iterator();
            while (iterator.hasNext()) {
                Entry<String, String> param = iterator.next();
                String key = param.getKey();
                String value = param.getValue();
                urlBuilder.append(key).append('=').append(value);
                if (iterator.hasNext()) {
                    urlBuilder.append('&');
                }
            }
        }
        return urlBuilder.toString();
    }

POST请求

public static String post(String url, Map<String, String> params) {
        try {
            HttpClient client = getHttpClient();
            HttpPost postMethod = new HttpPost(url);
            List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
            if (params != null && params.size() > 0) {
                Iterator<Entry<String, String>> iterator = params.entrySet()
                        .iterator();
                while (iterator.hasNext()) {
                    Entry<String, String> param = iterator.next();
                    String key = param.getKey();
                    String value = param.getValue();
                    BasicNameValuePair pair = new BasicNameValuePair(key, value);
                    pairs.add(pair);
                }
                postMethod
                        .setEntity(new UrlEncodedFormEntity(pairs, HTTP.UTF_8));
            }
            HttpResponse response = client.execute(postMethod);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                String result = EntityUtils.toString(response.getEntity());
                return result;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

POST请求-文件上传

public static String post(String url, File file) throws IOException {
        HttpClient client = getHttpClient();
        HttpPost post = new HttpPost(url);
        MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder
                .create();
        multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        multipartEntityBuilder.setCharset(Charset.forName("UTF-8"));
        multipartEntityBuilder.addTextBody("fileName", file.getName());
        multipartEntityBuilder.addBinaryBody("uploadFile", file);
        HttpEntity httpEntity = multipartEntityBuilder.build();
        post.setEntity(httpEntity);

        HttpResponse response = client.execute(post);
        StringBuffer sb = new StringBuffer();
        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            HttpEntity result = response.getEntity();
            if (result != null) {
                InputStream is = result.getContent();
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(is));
                String tempLine;
                while ((tempLine = br.readLine()) != null) {
                    sb.append(tempLine);
                }
            }
        }
        post.abort();
        return sb.toString();
    }

POST请求-多文件上传

public static String post(String url, Map<String, String> params,
            Map<String, String> files) throws IOException {
        HttpClient client = getHttpClient();
        HttpPost post = new HttpPost(url);
        MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder
                .create();
        multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        multipartEntityBuilder.setCharset(Charset.forName("UTF-8"));
        if (params != null && !params.isEmpty()) {
            for (Map.Entry<String, String> entry : params.entrySet()) {
                multipartEntityBuilder.addTextBody(entry.getKey(),
                        entry.getValue());
            }
        }

        if (files != null && !files.isEmpty()) {
            for (Map.Entry<String, String> entry : files.entrySet()) {
                File file = new File(entry.getValue());
                multipartEntityBuilder.addBinaryBody(entry.getKey(), file);
            }
        }
        HttpEntity httpEntity = multipartEntityBuilder.build();
        post.setEntity(httpEntity);
        HttpResponse response = client.execute(post);

        StringBuffer sb = new StringBuffer();
        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            HttpEntity result = response.getEntity();
            if (result != null) {
                InputStream is = result.getContent();
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(is));
                String tempLine;
                while ((tempLine = br.readLine()) != null) {
                    sb.append(tempLine);
                }
            }
        }
        post.abort();
        return sb.toString();
    }

工具类下载地址:http://download.csdn.net/detail/tailyou/9054485

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值