okHttp跳过强制https验证

okHttp在进行网络请求时,默认需要遵循HTTPS的加密握手过程。但在爬虫或模拟登录等场景中,若目标网站开启强制HTTPS验证,会增加开发复杂性。本文介绍如何通过重写okhttp的sslSocketFactory和hostnameVerifier,伪造证书以绕过HTTPS验证,从而正常访问这些网站。只需调用特定方法,即可实现HTTPS验证的规避。
部署运行你感兴趣的模型镜像

okHttp是基于client连接的,所有的网络连接https都要遵循几次握手才能数据相互传输,因为https的单向或者双向加密的,所以要想访问,就需要ssl证书。

对于想用他爬取一些网络数据以及模拟登陆一些网站的时候,https很大的程度加深了我们项目开发的难度,因为要匹配https。

那么对于我们并不是要开发我们公司或者自己的客户端,而是爬取或者登陆别人的网站的时候,我们大多数是不需要https的,大多数提供https的网站,是可以直接拿到网页源码等的,但是在有些网站开启了强制https验证的时候,我们如果直接访问https,就会访问出错。

那么需要我们重写okhttp提供的sslSocketFactory和hostnameVerifier类来伪造一个证书达到绕过https验证的方法。

使用如下的方法即可

private static OkHttpClient getUnsafeOkHttpClient() {
        try {
            // Create a trust manager that does not validate certificate chains
            final TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                        }
 
                        @Override
                        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                        }
 
                        @Override
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return new java.security.cert.X509Certificate[]{};
                        }
                    }
            };
 
            // Install the all-trusting trust manager
            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
            // Create an ssl socket factory with our all-trusting manager
            final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
 
            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.sslSocketFactory(sslSocketFactory);
            builder.hostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            });
            OkHttpClient okHttpClient = builder.build();
            return okHttpClient;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

调用方法为

OkHttpClient client = getUnsafeOkHttpClient();

如果有其他的功能更改,在这个方法里面修改即可。

这样方法强制性的https,就可以绕过了

您可能感兴趣的与本文相关的镜像

Langchain-Chatchat

Langchain-Chatchat

AI应用
Langchain

Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型和 Langchain 应用框架实现的开源项目,旨在构建一个可以离线部署的本地知识库问答系统。它通过检索增强生成 (RAG) 的方法,让用户能够以自然语言与本地文件、数据库或搜索引擎进行交互,并支持多种大模型和向量数据库的集成,以及提供 WebUI 和 API 服务

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值