您的位置:

Android HttpClient类的使用

一、HttpClient类的介绍

HttpClient是Apache下的一个Java开源项目,其作用是提供了一个高效、灵活、可扩展的处理HTTP请求的Java工具包,是用于Android上进行网络通信的标准工具。

使用HttpClient可以很方便地在Android应用程序中执行HTTP请求,例如GET、POST等请求,获取服务器发送的响应和状态信息。

二、HttpClient请求流程

HttpClient请求的流程主要分为以下几个步骤:

  1. 创建 HttpClient 实例
  2.     HttpClient httpClient = new DefaultHttpClient();
    
  3. 创建 HttpGet 或 HttpPost 请求对象
  4.     HttpGet httpGet = new HttpGet(url);
        HttpPost httpPost = new HttpPost(url);
    
  5. 设置请求参数
  6.     List<NameValuePair> paramList = new ArrayList<>();
        paramList.add(new BasicNameValuePair("username", "test"));
        paramList.add(new BasicNameValuePair("password", "123456"));
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, "UTF-8");
        httpPost.setEntity(entity);
    
  7. 客户端执行请求操作,并接收服务端返回的响应结果
  8.     HttpResponse httpResponse = httpClient.execute(httpGet);
    

三、HttpClient基本请求

1、GET请求

GET请求通过在URL后添加参数来传递参数信息。下面是一个使用HttpClient发送GET请求的例子。

public static String sendHttpGetRequest(String url) {
    String response = "";
    try {
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        HttpResponse httpResponse = httpClient.execute(httpGet);
        if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            HttpEntity entity = httpResponse.getEntity();
            if (entity != null) {
                response = EntityUtils.toString(entity, "UTF-8");
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return response;
}

2、POST请求

POST请求通过在请求体中添加参数来传递参数信息。下面是一个使用HttpClient发送POST请求的例子。

public static String sendHttpPostRequest(String url, Map<String, String> params) {
    String response = "";
    try {
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        List<NameValuePair> paramList = new ArrayList<>();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            paramList.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
        }
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, "UTF-8");
        httpPost.setEntity(entity);
        HttpResponse httpResponse = httpClient.execute(httpPost);
        if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            HttpEntity httpEntity = httpResponse.getEntity();
            if (httpEntity != null) {
                response = EntityUtils.toString(httpEntity, "UTF-8");
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return response;
}

四、HttpClient高级请求

1、HttpClient连接池

默认情况下,每次HttpClient请求操作都会创建一个新的HttpClient实例,如果在同一个应用程序中进行多次请求,这样就会导致资源的浪费。因此,在实际开发中可以考虑使用HttpClient连接池来维护一组可用的HttpClient实例,减少资源的浪费。

public class HttpClientPool {
    private static PoolingHttpClientConnectionManager connMgr;
    private static RequestConfig requestConfig;
    private static final int MAX_TIMEOUT = 5000;

    static {
        connMgr = new PoolingHttpClientConnectionManager();
        connMgr.setMaxTotal(200);
        connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());
        requestConfig = RequestConfig.custom()
                .setSocketTimeout(MAX_TIMEOUT)
                .setConnectTimeout(MAX_TIMEOUT)
                .setConnectionRequestTimeout(MAX_TIMEOUT)
                .build();
    }

    public static CloseableHttpClient getHttpClient() {
        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(connMgr)
                .setDefaultRequestConfig(requestConfig)
                .build();
        return httpClient;
    }
}

2、HttpClient拦截器

HttpClient拦截器是一个在请求执行前后对请求进行处理的机制。

拦截器可以在请求执行前添加一些公共属性,比如请求头、cookies等。也可以在请求执行成功后对返回的响应结果进行加工处理。

public class HttpHeaderInterceptor implements HttpRequestInterceptor {

    private Map<String, String> header;

    public HttpHeaderInterceptor(Map<String, String> header) {
        this.header = header;
    }

    @Override
    public void process(HttpRequest request, HttpContext context) {
        for (Map.Entry<String, String> entry : header.entrySet()) {
            request.addHeader(entry.getKey(), entry.getValue());
        }
    }
}

3、HttpClient文件上传

HttpClient可以通过MultipartEntity来进行文件上传操作。

public static String uploadFile(String url, Map<String, String> params, File file) {
    String response = "";
    try {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        for (Map.Entry<String, String> entry : params.entrySet()) {
            builder.addPart(entry.getKey(), new StringBody(entry.getValue(), ContentType.TEXT_PLAIN));
        }
        builder.addPart("filename", new FileBody(file));
        httpPost.setEntity(builder.build());
        CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
        if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            response = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return response;
}
Android HttpClient类的使用

2023-05-14
Android HttpClient的最佳实践

2023-05-17
使用HttpClient下载

2023-05-19
android访问php,android访问mysql数据库

2022-11-17
android传输json(android传输到iphone

本文目录一览: 1、Android 怎么把json数据传递到下个页面 2、Android 发送JSON数据问题 3、Android利用Json来进行网络数据传输 4、Android如何传输参数给一个u

2023-12-08
Python工程师教你如何使用Android HttpCli

2023-05-14
android的js框架(android js引擎)

本文目录一览: 1、Android真的推荐用MVI模式?MVI和MVVM有什么区别? 2、在Android上怎样实现JAVA和JS交互 3、android 混合开发 用什么框架好 4、Android如

2023-12-08
Android Lint完全指南

2023-05-18
阿里云笔记的功能与使用详解

2023-05-21
印象笔记记录java学习(Java成长笔记)

2022-11-12
Android网络请求全面解析

2023-05-18
Android文档阐述

2023-05-21
提升Android应用用户体验的秘诀

对于现代人来说,生活离不开手机和App。随着移动互联网的快速发展,移动应用市场日益庞大,应用数量多样性极高,用户对应用的体验要求也越来越高。一个具有良好用户体验的应用,可以帮助用户更加便利的完成各种任

2023-12-08
安全加固:为Android应用添加HTTPS支持

2023-05-14
解析android应用中的JSON数据

2023-05-14
Android日志库:使用Logger记录调试信息

2023-05-14
Android Http请求:如何与服务器进行数据交互?

一、HTTP请求介绍 HTTP(Hyper Text Transfer Protocol)是一种用于传输超文本的协议,其中的超文本指的是一种可以包含图片、音频、视频等多种内容的文本形式。 HTTP请求

2023-12-08
Android开发必备进阶技巧

在Android开发过程中,我们需要掌握一些进阶技巧来提高开发效率和应用功能。本文将从多个方面介绍一些Android开发必备的进阶技巧。 一、构建应用 构建是指将我们编写的代码打包成可执行的应用程序,

2023-12-08
使用Android Studio轻松实现无线调试

2023-05-14
使用Timber库实现Android应用日志记录和管理

一、什么是Timber库 Timber是一个Android库,它提供了应用程序日志记录和管理的功能。与使用Android内置的Log类相比,Timber提供了更好的灵活性和可读性,具体表现在以下几个方

2023-12-08