Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >httpclient访问https

httpclient访问https

作者头像
code4it
发布于 2018-09-17 06:47:09
发布于 2018-09-17 06:47:09
1.1K00
代码可运行
举报
文章被收录于专栏:码匠的流水账码匠的流水账
运行总次数:0
代码可运行

本文从spring cloud netflix zuul里头摘出httpclient访问https/http的源码,展示一下怎么用httpclient去访问https。

newConnectionManager

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected PoolingHttpClientConnectionManager newConnectionManager(boolean sslHostnameValidationEnabled) {
        try {
            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, new TrustManager[] { new X509TrustManager() {
                @Override
                public void checkClientTrusted(X509Certificate[] x509Certificates,
                                               String s) throws CertificateException {
                }

                @Override
                public void checkServerTrusted(X509Certificate[] x509Certificates,
                                               String s) throws CertificateException {
                }

                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            } }, new SecureRandom());

            RegistryBuilder<ConnectionSocketFactory> registryBuilder = RegistryBuilder
                    .<ConnectionSocketFactory> create()
                    .register("http", PlainConnectionSocketFactory.INSTANCE);
            if (sslHostnameValidationEnabled) {
                registryBuilder.register("https",
                        new SSLConnectionSocketFactory(sslContext));
            }
            else {
                registryBuilder.register("https", new SSLConnectionSocketFactory(
                        sslContext, NoopHostnameVerifier.INSTANCE));
            }
            final Registry<ConnectionSocketFactory> registry = registryBuilder.build();

            PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
            connectionManager
                    .setMaxTotal(200);
            connectionManager.setDefaultMaxPerRoute(20);
            return connectionManager;
        }
        catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }

其中sslHostnameValidationEnabled指定要不要检验ssl,如果不校验,则是使用NoopHostnameVerifier

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Contract(threading = ThreadingBehavior.IMMUTABLE)
public class NoopHostnameVerifier implements HostnameVerifier {

    public static final NoopHostnameVerifier INSTANCE = new NoopHostnameVerifier();

    @Override
    public boolean verify(final String s, final SSLSession sslSession) {
        return true;
    }

    @Override
    public final String toString() {
        return "NO_OP";
    }

}

newClient

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(60000)
                .setConnectTimeout(60000)
                .setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
        HttpClientBuilder httpClientBuilder = HttpClients.custom();
        httpClientBuilder.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE);
        HttpClient httpclient = httpClientBuilder.setConnectionManager(newConnectionManager(false))
                .useSystemProperties().setDefaultRequestConfig(requestConfig)
                .setRetryHandler(new DefaultHttpRequestRetryHandler(0, false))
                .setRedirectStrategy(new RedirectStrategy() {
                    @Override
                    public boolean isRedirected(HttpRequest request,
                                                HttpResponse response, HttpContext context)
                            throws ProtocolException {
                        return false;
                    }

                    @Override
                    public HttpUriRequest getRedirect(HttpRequest request,
                                                      HttpResponse response, HttpContext context)
                            throws ProtocolException {
                        return null;
                    }
                }).build();

request

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HttpRequest httpRequest = new BasicHttpRequest("GET","/api/data");
        HttpHost httpHost = new HttpHost("demo.com.cn",-1,"https");
        try{
            return httpClient.execute(httpHost, httpRequest);
//            System.out.println(response.getEntity().getContent());
        }catch (Exception e){
            e.printStackTrace();
        }

小结

  • 使用NoopHostnameVerifier不去验证ssl,但是可能存在风险
  • 构造X509TrustManager
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码匠的流水账 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
zuul自定义SimpleHostRoutingFilter
zuul的SimpleHostRoutingFilter主要用来转发不走eureka的proxy,里头是使用httpclient来转发请求的,但是有时候我们需要改动相关httpclient的配置,这个时候,就需要修改SimpleHostRoutingFilter了,这里讲一下如何扩展SimpleHostRoutingFilter。
code4it
2018/09/17
1.3K0
httpclient访问https
本文从spring cloud netflix zuul里头摘出httpclient访问https/http的源码,展示一下怎么用httpclient去访问https。
全栈程序员站长
2022/07/20
8230
HttpClient5升级笔记--API篇
最近终于是安奈不住升级的冲动,将自己项目的HttpClient版本从4升级到了5,其过程不可谓不艰辛,很多API改动让人无从下手。
FunTester
2023/12/26
3.5K0
HttpClient5升级笔记--API篇
秒懂HTTPS接口(接口测试篇)
在秒懂HTTPS接口(实现篇)中我们通过Java实现了一个简单的HTTPS项目示例,下面我们来测试下我们上面这个HTTPS接口(Java版)
高楼Zee
2019/07/17
3.4K0
秒懂HTTPS接口(接口测试篇)
HttpClient与CloseableHttpClient
起因是最近做的一个历史遗留项目,需要加些新需求,在本机进行压测时,发现在并发600的状态下跑一段时间后,就会开始偶现500的错误。可能是老项目用的人少(B2B的项目),实际部署后以前也没有人反馈过这个问题,大致跟踪了下日志,发现是系统在调用第三方服务出现异常,这种情况原因很多,需要仔细看异常堆栈打出来的Exception信息,将问题范围缩小并求证,这次抛出的是java.net.SocketException: Too many open files。表明服务器上开启了过多socket句柄,超上限了(一般是1024),这种情况下是无法建立新的网络连接的。
全栈程序员站长
2022/07/25
1.8K0
HttpClient与CloseableHttpClient
httpclient4.x访问https[通俗易懂]
https有单向认证和双向认证之分,单向认证即客户端只会认证服务端,双向认证是客户端需要认证服务端,服务端也需要认证客户端。
全栈程序员站长
2022/09/15
1K0
httpclient发送https协议请求以及javax.net.ssl.SSLHandshakeException解决办法
本人在做接口自动化的过程中,遇到了请求第三方https协议请求,在经过了短暂的知识重新学习之后,写完代码执行起来总是遇到一个异常,在用客户端执行请求的时候抛出来的,下面是异常的信息:
FunTester
2019/10/17
3.9K0
记一次因证书问题导致请求失败问题SSLHandshakeException
转载请注明出处:https://www.cnblogs.com/funnyzpc/p/10989813.html
上帝
2019/06/14
2.3K0
一桩由ssl证书过期引起的血案
公司全部站点升级了https,升级过程由同事们完成,我没有过问细节。ssl证书使用的是阿里云 的【Symantec免费版 SSL】一年免费。
王小宝
2018/07/06
2.4K0
一桩由ssl证书过期引起的血案
Apache HttpClient4使用教程
HttpClient默认情况 会对302、307的GET和HEAD请求以及所有的303状态码做重定向处理
全栈程序员站长
2022/09/15
8300
聊聊HttpComponentsHttpInvokerRequestExecutor
本文主要研究一下HttpComponentsHttpInvokerRequestExecutor
code4it
2023/10/03
2520
如何让Apache HttpClient 支持SSL配置?
按照Httpclient的设计要求编写一个响应信息处理类,也可以使用匿名内部类或者Lambda表达式。
阿东
2024/05/08
1.1K0
如何让Apache HttpClient 支持SSL配置?
java 用httpclient访问https时经常返回403的原因
纠结了一天的问题终于落下了帷幕!先听一首歌吧 今天使用了一些httpclient包进行https网页数据的访问,但是一直返回403的问题,一开始以为网站做了限制为了防止爬虫,后来就加入了头部user-Agent来模拟浏览器,结果还是不行。紧接着又加入了cookie,结果仍然返回403。直到下午去github上看到了一个二次封装httpclient的util工具。下载下来放到了idea里访问了一下https的这个url结果成功了。对比了一下不同之处,除了httpclient jar包的版本有高低外还有就是
企鹅号小编
2018/01/29
3.5K0
java 用httpclient访问https时经常返回403的原因
封装httpClient工具类进行get、post、put、delete的http接口请求,可添加请求头与参数,支持多线程
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157763.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/18
2.9K0
HttpClient 辅助类,简化调用
默认带有的INSTANCE 可以请求所有的HTTPS 和HTTP,使用带有证书的构造函数自己构建的client对象可以请求需要证书验证的HTTPS地址和HTTP。client对象为线程安全的,所以一个client允许在多个线程下使用。不要关闭client对象,否则多个线程使用同一个client就会有问题。
前Thoughtworks-杨焱
2021/12/08
9010
聊聊HttpComponentsHttpInvokerRequestExecutor
本文主要研究一下HttpComponentsHttpInvokerRequestExecutor
code4it
2023/10/06
1850
聊聊HttpComponentsHttpInvokerRequestExecutor
聊聊HttpClientBuilder
httpclient-4.5.10-sources.jar!/org/apache/http/impl/client/HttpClientBuilder.java
code4it
2023/10/04
4680
RestTemplate自定义异常白名单,连接https
RestTemplate作为spring-web项目的一部分,在Spring 3.0版本开始被引入。
鱼找水需要时间
2023/02/16
3810
【连载 29】HttpClient详解之客户端
在当今高性能、高并发的网络应用开发中,HTTP客户端作为系统间通信的核心组件,其配置优化直接影响着整体性能表现。Apache HttpClient作为Java生态中最成熟、功能最丰富的HTTP客户端工具库,为开发者提供了高度可定制的连接管理、请求控制和异常处理机制。本节将深入剖析HttpClient的核心配置项,从连接池管理、SSL安全策略到超时控制、重试机制,全面讲解如何构建一个高性能、高可靠的HTTP客户端实例。通过精细调节连接数、路由策略、报文约束等参数,开发者能够有效提升系统吞吐量,避免资源浪费,同时掌握多用户并发场景下的Cookie管理技巧和异常请求的智能重试策略,为构建企业级应用通信框架奠定坚实基础。
FunTester
2025/04/06
2050
【连载 29】HttpClient详解之客户端
基于线程池创建HttpClient的请求
public class HttpClientUtils { private final static Logger logger = LoggerFactory.getLogger(HttpClientUtils.class); private static CloseableHttpClient httpClient; private static PoolingHttpClientConnectionManager manager; // 连接池管理类 private
Dream城堡
2022/01/07
1K0
推荐阅读
相关推荐
zuul自定义SimpleHostRoutingFilter
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验