HttpClient实战:get 请求和 post 请求

目录

一 概述

二 特点

三 依赖引入

四 GET 请求

五 POST 请求

五 参考文档


一 概述

       超文本传输​​协议(HTTP)可能是当今 Internet 上使用的最重要的协议。 Web 服务,支持网络的设备和网络计算的发展继续将HTTP 协议的作用扩展到用户驱动的 Web 浏览器之外,同时增加了需要 HTTP 支持的应用程序的数量。

       尽管 java.net 包提供了通过 HTTP 访问资源的基本功能,但它并未提供许多应用程序所需的完全灵活性或功能。 HttpClient 旨在通过提供一个高效,最新且功能丰富的软件包来实现这一空白,该软件包实现了最新 HTTP 标准和建议的客户端。

       HttpClient 专为扩展而设计,同时为基本 HTTP 协议提供强大支持,对于构建支持 HTTP 的客户端应用程序(如Web 浏览器,Web 服务客户端或利用或扩展 HTTP 协议进行分布式通信的系统)的任何人都将对 HttpClient 感兴趣。

二 特点

  • 基于标准、纯净的Java语言,实现了 HTTP1.0 和 HTTP1.1。
  • 以可扩展的面向对象的结构实现了 HTTP 全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
  • 支持加密的 HTTPS协议(HTTP 通过 SSL 协议)。
  • 通过 HTTP 代理方式建立透明的连接。
  • 利用 CONNECT 方法通过 HTTP 代理建立隧道的 HTTPS 连接。
  • Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos 认证方案。
  • 插件式的自定义认证方案。
  • 可插拔的安全套接字工厂,使得接入第三方解决方案变得更容易
  • 连接管理支持使用多线程的的应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。
  • 自动化处理 Set-Cookie:来自服务器的头,并在适当的时候将它们发送回cookie。
  • 可以自定义 Cookie 策略的插件化机制。
  • Request 的输出流可以避免流中内容体直接从 socket 缓冲到服务器。
  • Response 的输入流可以有效的从 socket 服务器直接读取相应内容。
  • 在 HTTP1.0 和 HTTP1.1 中使用用 KeepAlive 来保持持久连接。
  • 可以直接获取服务器发送的响应码和响应头部。
  • 具备设置连接超时的能力。
  • 支持 HTTP/1.1 响应缓存。
  • 源代码基于 Apache License 可免费获取。

三 依赖引入

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.10</version>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>

四 GET 请求

public static String get(String url, Map<String, Object> params, Map<String, String> headers) throws Exception {
    CloseableHttpClient httpclient = HttpClients.createDefault();
    String response = null;
    try {
        String geturl = url;
        if (params != null && params.size() != 0) {
            geturl = genUrl(params, url);
        }
        HttpGet httpGet = new HttpGet(geturl);
        if (null != headers) {
            for (String headerName : headers.keySet()) {
                httpGet.setHeader(headerName, headers.get(headerName));
            }
        }
        response = httpClient.execute(httpGet, new JsonResponseServer());
    } catch (Exception e) {
        logger.error("get url = {}, params = {}, headers = {}, error = {} ", url, params, headers, e);
        throw e;
    } finally {
        logger.info("URL = {}, params = {}, headers = {}" , url , params, headers);
    }
    return response;
}

public static String genUrl(Map<String, Object> params, String baseUrl) {
    return genUrl(params, baseUrl, CharSet.UTF8);
}

public static String genUrl(Map<String, Object> params, String baseUrl, final String encoding) {
    StringBuilder url = new StringBuilder(baseUrl);
    url.append("?");
    url.append(Joiner.on("&").join(
            Maps.transformEntries(params, new Maps.EntryTransformer<String, Object, String>() {
                @Override
                public String transformEntry(String key, Object value) {
                    if (key == null) {
                        return "";
                    }
                    if (value == null) {
                        return key + "=";
                    }
                    return key + "=" + encode(value.toString(), encoding);
                }
            }).values()));
    return url.toString();
}

五 POST 请求

public static String post(String url, Map<String, Object> params, Map<String, String> headers) throws Exception {
    CloseableHttpClient httpclient = HttpClients.createDefault();
    String result = null;
    try {
        HttpPost httpPost = new HttpPost(url);
        if (headers != null && headers.size() > 0) {
            for (String headerName : headers.keySet()) {
                httpPost.setHeader(headerName, headers.get(headerName));
            }
        }
        List<NameValuePair> paramsList = Lists.newArrayList();
        if (params != null && params.size() > 0) {
            for (String paramName : params.keySet()) {
                if (params.get(paramName) != null) {
                    paramsList.add(new BasicNameValuePair(paramName, params.get(paramName).toString()));
                }
            }
        }
        httpPost.setEntity(new UrlEncodedFormEntity(paramsList, CharSet.UTF8()));
        result = httpClient.execute(httpPost, new JsonResponseServer());
    } catch (Exception e) {
        logger.warn("post start url = {}, params = {}, headers = {}, error = {} ", url, params, headers, e);
        throw e;
    } finally {
        logger.info("URL = {}" , url , headers);
    }
    return result;
}

五 参考文档

       https://hc.apache.org/httpcomponents-client-4.5.x/index.html

       https://hc.apache.org/httpcomponents-client-4.5.x/quickstart.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值