基于 HttpClient 4.5 的 HttpClientUtils

Apache HttpClient 5 使用详细教程 转存失败重新上传取消超文本传输协议(HTTP)可能是当今互联网上最重要的协议之一,Web 服务、微服务以及支持网络的各种设备上的服务几乎都是 HTTP 协议,HTTP 协议已经从 Web 浏览器走向了更广泛的使用场景。虽然java.net包已经提供了 HTTP 访问资源的基本功能,但是它不够灵活,而且不能随心所欲的进行自定义。... 阅读详情

我编写工具类所参考的文档

pache HttpClient:

http://hc.apache.org/httpcomponents-client-ga/index.html

中文翻译教程:

https://www.yiibai.com/apache_httpclient

stackoverflow 关于SSL的讨论:

https://stackoverflow.com/questions/19517538/ignoring-ssl-certificate-in-apache-httpclient-4-3

代码要点

1、基于httpclient 4.5.8,代码无deprecated

2、GET请求 + POST请求

3、ResponseHandler处理响应,自动释放所有HTTP连接

4、忽略验证SSL证书来处理Https请求

5、请求携带CookieStore

参考代码(java)

public class HttpClientUtils {

    private static final Logger log = LoggerFactory.getLogger(HttpClientUtils.class);

    /**
     * POST 请求
     *
     * @param uri URI
     * @return response
     * @throws IOException
     */
    public static String doPost(String uri) throws IOException {
        CloseableHttpClient httpClient = createHttpClient("", true, 10);
        //创建post方式请求对象
        HttpPost httpPost = new HttpPost(uri);
        httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");
        httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");

        ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
            @Override
            public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
                int status = response.getStatusLine().getStatusCode();
                if (status >= 200 && status < 300) {
                    HttpEntity entity = response.getEntity();
                    return entity != null ? EntityUtils.toString(entity, "UTF-8") : null;
                } else {
                    log.error("Unexpected response status: " + status);
                    throw new ClientProtocolException("Unexpected response status: " + status);
                }
            }
        };
        String response = httpClient.execute(httpPost, responseHandler);
        return response;
    }

    /**
     * Get 请求
     *
     * @param uri URI
     * @return response
     * @throws IOException
     */
    public static String doGet(String uri) throws IOException {
        CloseableHttpClient httpClient = createHttpClient("", true, 10);
        HttpGet httpGet = new HttpGet(uri);
        httpGet.setHeader("Content-type", "application/x-www-form-urlencoded");
        httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");

        ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
            @Override
            public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
                int status = response.getStatusLine().getStatusCode();
                if (status >= 200 && status < 300) {
                    HttpEntity entity = response.getEntity();
                    return entity != null ? EntityUtils.toString(entity, "UTF-8") : null;
                } else {
                    log.error("Unexpected response status: " + status);
                    throw new ClientProtocolException("Unexpected response status: " + status);
                }
            }
        };
        String response = httpClient.execute(httpGet, responseHandler);
        return response;
    }

    /**
     * @param sessionId         会话ID
     * @param automaticRedirect 自动重定向
     * @param timeOut           超时时间
     * @return CloseableHttpClient
     */
    private static CloseableHttpClient createHttpClient(String sessionId, boolean automaticRedirect, int timeOut) {
        //忽略校验HTTPS服务器证书, 将hostname校验和CA证书校验同时关闭
        SSLContext sslContext = null;
        try {
            sslContext = SSLContexts.custom()
                    .loadTrustMaterial(TrustSelfSignedStrategy.INSTANCE)
                    .build();
        } catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
            log.error("HttpClientUtils.createHttpClient: " + e);
        }
        //设置http和https协议对应的处理socket链接工厂的对象
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.INSTANCE)
                .register("https", new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE))
                .build();
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
        //构建请求配置信息
        timeOut = timeOut * 1000;
        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(timeOut) //获取数据的超时时间
                .setConnectTimeout(timeOut) //建立连接的超时时间
                .setConnectionRequestTimeout(timeOut) //连接池获取到连接的超时时间
                .build();
        //创建自定义httpclient对象
        HttpClientBuilder builder = HttpClients.custom();
        builder.setDefaultRequestConfig(requestConfig); //设置默认请求配置
        builder.setConnectionManager(connectionManager); //设置连接管理器
        if (!automaticRedirect) { //设置自动重定向配置
            builder.disableRedirectHandling();
        }
        //配置CookieStore
        CookieStore cookieStore = null;
        if (StringUtils.isNotBlank(sessionId)) {
             //TODO...redis查找cookieStore
            if (cookieStore == null) {
                cookieStore = new BasicCookieStore();
            }
            builder.setDefaultCookieStore(cookieStore);
        }
        CloseableHttpClient httpClient = builder.build();
        return httpClient;
    }
}


httpclient-4.5.8.zip HttpClient 可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本包里面基本已经齐全,包含以下版本的包commons-codec-1.11.jar,commons-logging-1.2.jar,fluent-hc-4.5.8.jar,httpclient-4.5.8.jar,httpclient-cache-4.5.8.jar,httpclient-osgi-4.5.8.jar,httpclient-win-4.5.8.jar,httpcore-4.4.11.jar,httpmime-4.5.8.jar,jna-4.5.2.jar,jna-platform-4.5.2.jar 立即下载

相关推荐

555定时器呼吸灯电路制作全攻略:从仿真到实物搭建(附避坑指南)

本文详细介绍了使用555定时器制作呼吸灯电路的完整流程,从基础原理到实物搭建,包括电路设计、元件选择、仿真验证、焊接技巧及调试优化。特别提供了避坑指南,帮助电子爱好者快速掌握这一经典DIY项目,实现美观的呼吸灯效果。

weixin_33734785的博客 402

httpcore/httpclient简单实例

项目摘要: 项目具体实施: httpcore实例 新建一个maven项目,引入如下jar包: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4...

雨季的博客 1857

基于gm/id方法的折叠式共源共栅放大器设计实践

本文详细介绍了基于gm/id设计方法进行折叠式共源共栅放大器设计的完整流程。该方法通过确定晶体管的跨导效率(gm/id)作为核心设计参数,将复杂的放大器设计转化为有明确路径的优化问题。文章以设计一个增益80dB、带宽1GHz的两级放大器为例,逐步拆解了从指标分解、关键晶体管工作点选取、到实战仿真与微调的全过程,特别强调了第二级设计对稳定性的影响以及相位裕度的调试技巧。

w8x9y0z1的博客 415

HttpClient5如何设置代理

在这篇文章中会对HttpClient5如何进行代理进行说明,我的HttpClient版本是5.2.1。**在进行代理之前请先准备好代理服务器**。

秃头披风侠的博客 3443

langchain4j+milvus实战

本文主要研究一下如何使用langchain4j来对接向量数据库milvus。

go4it 1472

Excel地理探测器实战:5分钟搞定空间分异性分析(附完整数据集)

本文详细介绍了如何使用Excel地理探测器插件进行空间分异性分析。通过5分钟实战教程,手把手指导数据格式准备、软件操作及四大探测器(分异及因子、交互作用、风险区、生态探测器)的结果解读,帮助规划师、研究者快速验证地理因素对现象分布的影响,大幅降低GIS分析门槛。

peace的博客 607

聊聊HttpClient的ResponseHandler

***/@Override/*** object.*/AbstractResponseHandler声明实现ResponseHandler接口,其handleResponse方法针对statusCode大于等于300的抛出HttpResponseException,对于entity不为null的执行handleEntity方法。

go4it 1021

Python自动化监控:实时捕捉LOF基金溢价套利机会并微信预警

本文详细介绍了如何使用Python构建一个自动化监控系统,实时捕捉LOF基金的溢价套利机会。通过AKShare获取基金数据,结合雪球API计算实时溢价率,并利用企业微信API实现微信推送预警,帮助投资者高效、自动地发现并抓住转瞬即逝的套利机会。

weixin_28327051的博客 524

HttpClient4.x进行Get/Post请求并使用ResponseHandler处理响应

HTTPClient4之后,基本重写了3的所有代码,使得API用起来更显简单有力,最简单的例子体现在get/post请求以及请求响应结果的处理上。3的时候,需要自己处理响应流,无论是网页编码识别还是代码处理等各方面,非常不便,4之后使用ResponseHandler可以非常方便和简洁地处理上述问题。 如下代码演示了如何使用响应处理器(ResponseHandler)来处理HTTP响应。这是执行HT

尤卡里的专栏 725

AI驱动全栈开发实战:基于Spec与Codex的规格驱动开发指南

1. 先搞清楚“AI重构前端全栈”到底在解决什么实际问题 最近很多人在聊“AI重构前端全栈”,听起来像是又一个营销概念。但如果你真的拆开看,它核心解决的是一个非常具体且痛苦的问题: 一个开发者,如何从零开始,系统性地、不跑偏地完成一个完整项目,并且保证代码质量和架构一致性。 传统开发流程里,产品经理出PRD,前后端开会对齐,前端画页面,后端写接口,测试再介入。这个过程沟通成本高,文档容易过时,新人上手慢。而“AI重构”的思路,是试图用一套 规范化的指令(Spec) 来驱动AI(比如Codex这类模型)生成代

weixin_30596023的博客 460

基于OkHttp3+Retrofit2+RxJava3搭建响应式网络框架

本文介绍了一个基于OkHttp3+Retrofit3+RxJava3的响应式网络框架设计。该框架采用分层架构,OkHttp3负责底层网络请求,Retrofit3封装HTTP接口,RxJava3实现响应式流处理。核心亮点包括:1)高度解耦的分层设计;2)统一的异常处理和响应体封装;3)RxJava3实现线程切换和请求管理;4)MVVM架构适配,业务层只需关注数据逻辑。框架提供了完整的实现方案,包括全局配置、拦截器、响应转换、接口声明、仓库封装等组件,并支持生产环境扩展功能如Cookie持久化、Token刷新等

fuge2008的博客 871

HttpClient工具类(基于HttpClient4.5+)

HttpClient工具类(基于HttpClient4.5+)1、pom添加httpclient依赖2、HttpClientUtils 工具类实现代码 在实际开发中会遇到RPC的场景,我们可以根据实际业务需求,选择合适的RPC框架,当然也可以自己封装一个工具类来实现。 以下工具类HttpClientUtils基于HttpClient4.5+ 1、pom添加httpclient依赖 <dependency> <groupId>org.apache.httpcomponents&

Aron2278的博客 1305

Android11原生设置屏幕亮由Gamma变化改为线性变化

从Android9 开始屏幕亮度调解变成非线性变化,这样的话就会出现 之前亮度变化很小,到后面时变化亮度很快; 修改为线性变化,只需要修改 ./frameworks/base/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache L

Android 4926

HttpClient工具类 HttpClientUtils.java

简介 依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency> api 发送get请求: doGet(String url); 发送post请求,传参数json: doPostJson(Str

lud 842

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java模拟客户端请求工具类HttpClientUtils

1.导入maven依赖 <!-- 模拟客户端 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </d

weixin_41931278的博客 555

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

httpclientutil java_HttpClientUtils.java

package com.vcredit.ddcash.batch.util;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import j...

weixin_35638129的博客 322

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HttpClientUtils封装

增加maven配置 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5</version> &l...

weixin_33759269的博客 243

HttpClientUtils

import java.io.IOException; import java.util.HashMap;import java.util.List;import java.util.Map; import org.apache.commons.httpclient.Header;import org.apache.commons.httpclient.HttpClient;impo...

Ningning198019的博客 163

HttpclientUtils的实现(重发,post)

文章目录 最近开发的项目需要使用http请求调用其他接口,所以需要使用到apache的httpclient,本人使用的是4.4.10版本 首先引入依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpc...

qq_43009316的博客 760

HttpClient的用法

简介 2.1 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、 功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和协议。 2.2 Android已成功集成了HttpClient,这意味这开发人员可以直接在Android应用中使用 HtppClient来提交请求、接收响应 注:在API 23中,Google已经移除...

t1136237940的博客 517

HttpClient工具类

HttpClient工具类支持: 1. 支持http和https协议; 2. 支持GET、POST、PUT、DELETE请求; 3. 支持图片下载到本地。

kersixy的博客 1956

封装HttpClientUtils 同时支持Http 和Https

1:引入对应的依赖信息 <!-- fastJson--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> &...

一尘在心的博客 3884

Httpclient

  今天给大家分享的是Httpclient,如有不足,敬请指教。 一、Httpclient简介 1.1 什么是httpclient HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。实现了所有 HTTP 的方法(GET,POST,PUT,HEA...

weixin_43974276的博客 487
上一篇: Python 异常
「已注销」
博客等级 码龄10年 80粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值