android httpClient 支持HTTPS的处理方式

Android使用HttpClient和HttpsUrlConnection两种方式访问https网站 使用httpclient和httpsurlconnection两种方法访问https网址,同时分为验证证书和不验证证书两种方法 立即下载

问题:
项目中Android https或http请求地址重定向为HTTPS的地址,相信很多人都遇到了这个异常(无终端认证): javax.NET.ssl.SSLPeerUnverifiedException: No peer certificate

解决过程:
1.没遇到过的问题,搜索吧,少年

log里出现这个异常,作者第一次遇到,不知道啥意思。看下字面意思,是ssl协议中没有终端认证。SSL?作者没用到ssl协议呀,只是通过httpClient请求一个重定向https的地址。
好吧,google下,知道了个差不多情况的帖子,http://www.eoeandroid.com/thread-161747-1-1.html。恩恩,一个不错的帖子,给出了个解决方案。照着来试下。添加个继承SSLSocketFactory的
自定义类。并在初始化httpclient支持https时,注册进去。看下面代码:

public class HttpClientHelper {
02

03
    private static HttpClient httpClient;
04

05
    private HttpClientHelper() {
06
    }
07

08
    public static synchronized HttpClient getHttpClient() {
09

10
        if (null == httpClient) {
11
            // 初始化工作
12
            try {
13
                KeyStore trustStore = KeyStore.getInstance(KeyStore
14
                        .getDefaultType());
15
                trustStore.load(null, null);
16
                SSLSocketFactory sf = new SSLSocketFactoryEx(trustStore);
17
                sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);  //允许所有主机的验证
18

19
                HttpParams params = new BasicHttpParams();
20

21
                HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
22
                HttpProtocolParams.setContentCharset(params,
23
                        HTTP.DEFAULT_CONTENT_CHARSET);
24
                HttpProtocolParams.setUseExpectContinue(params, true);
25

26
                // 设置连接管理器的超时
27
                ConnManagerParams.setTimeout(params, 10000);
28
                // 设置连接超时
29
                HttpConnectionParams.setConnectionTimeout(params, 10000);
30
                // 设置socket超时
31
                HttpConnectionParams.setSoTimeout(params, 10000);
32

33
                // 设置http https支持
34
                SchemeRegistry schReg = new SchemeRegistry();
35
                schReg.register(new Scheme("http", PlainSocketFactory
36
                        .getSocketFactory(), 80));
37
                schReg.register(new Scheme("https", sf, 443));
38

39
                ClientConnectionManager conManager = new ThreadSafeClientConnManager(
40
                        params, schReg);
41

42
                httpClient = new DefaultHttpClient(conManager, params);
43
            } catch (Exception e) {
44
                e.printStackTrace();
45
                return new DefaultHttpClient();
46
            }
47
        }
48
        return httpClient;
49
    }
50

51
}
52

53
class SSLSocketFactoryEx extends SSLSocketFactory {
54

55
    SSLContext sslContext = SSLContext.getInstance("TLS");
56

57
    public SSLSocketFactoryEx(KeyStore truststore)
58
            throws NoSuchAlgorithmException, KeyManagementException,
59
            KeyStoreException, UnrecoverableKeyException {
60
        super(truststore);
61

62
        TrustManager tm = new X509TrustManager() {
63

64
            @Override
65
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
66
                return null;
67
            }
68

69
            @Override
70
            public void checkClientTrusted(
71
                    java.security.cert.X509Certificate[] chain, String authType)
72
                    throws java.security.cert.CertificateException {
73

74
            }
75

76
            @Override
77
            public void checkServerTrusted(
78
                    java.security.cert.X509Certificate[] chain, String authType)
79
                    throws java.security.cert.CertificateException {
80

81
            }
82
        };
83

84
        sslContext.init(null, new TrustManager[] { tm }, null);
85
    }
86

87
    @Override
88
    public Socket createSocket(Socket socket, String host, int port,
89
            boolean autoClose) throws IOException, UnknownHostException {
90
        return sslContext.getSocketFactory().createSocket(socket, host, port,
91
                autoClose);
92
    }
93
94
   @Override
95
   public Socket createSocket() throws IOException {
96
        return sslContext.getSocketFactory().createSocket();
97
    }
98
}

http://blog.youkuaiyun.com/lihenair/article/details/17441169

CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理(一) CHB-MIT癫痫EEG脑电数据处理CHB-MIT头皮脑电图数据介绍CHB-MIT头皮脑电图数据下载CHB-MIT头皮脑电图数据处理提取原始数据滤波(0.1~50hz)数据分块(时间窗口) CHB-MIT头皮脑电图数据介绍 该数据库收集自波士顿儿童医院,其中包括患有难治性癫痫发作的儿科患者的脑电图记录。停用抗癫痫药物后最多持续几天对受试者进行监测,以表征其癫痫发作并评估其对手术干预的候选资格。 从22位受试者中收集了23个病例的记录(5例男性,3至22岁; 17例女性,1.5至19岁)。 (案例chb21是 阅读详情

相关推荐

(蓝桥杯)STM32G431RBT6(SysTick timer)

选用最基础的定时器。

2301_81764359的博客 1899

Android进阶(三)android httpClient 支持HTTPS的访问方式

项目中Androidhttps请求地址遇到了这个异常(无终端认证): javax.net.ssl.SSLPeerUnverifiedException:Nopeercertificate 是SSL协议中没有终端认证。 没有遇到过的问题,于是无奈的去找度娘。。。。。。。,各种问题,各种纠结。。。。。。 看了不少大神的博客后得到的解决方案如下: /**

IT全栈 华强工作室 5万+

常用本体建模工具

常用本体建模工具: Apollo、OntoStudio、TopBraid Composer、Semantic Turkey、Knoodl、Chimaera、OliEd、WebODE、Kmgen和DOME Protégé Protégé[1]是一款由斯坦福大学编写并维护的开源本体建模和编辑工具,其支持Web版本和PC版本,使用OWL语言(关于OWL的详细介绍可参看前文2.1节内容)对知识进行表示,读者可以通过Protégé的官方网站访问Web版本或下载桌面版本。Protégé最早开发于1987年,最初目的是

qq_40503347的博客 6161

android httpClient 支持HTTPS的2种处理方式

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33912246的博客 316

《Halcon 100项目-9》Halcon彩色线序检查

Halcon彩色线序检查

doubleintfloat的博客 1042

表格数据学习的图神经网络综述

今天学习一篇发表在中科院一区期刊《ACM Computing Surveys》的综述文章《Graph Neural Networks for Tabular Data Learning: A Survey with Taxonomy & Directions》,该刊主要刊载计算机理论方法领域的系统性综述与教程论文,注重跨学科技术融合研究,最新的影响因子为28.0。本文的目的在于通过学习这篇文章,了解关于表格数据学习点图神经网络一些基础知识。

qq_41009600的博客 799

Android HttpClient访问https接口

由于之前项目的接口需要安全测评,从HTTP变成了https,搞得Android这边也要变,原本以为和移动端没关系。事实错了。。。我用的是HttpClient来进行访问,没有进行证书验证则会报错。Android采用X509的证书信息机制,于是乎百度了一下,找到了解决方案。下面贴出工具类。 package test; import java.io.IOException; import

qq_28658337的博客 878

【Matlab】从零开始掌握 MATLAB 安装激活:从环境搭建到问题解决全指南

打开 MATLAB,点击 “主页 - 设置路径”;点击 “添加文件夹”,选择自定义的工作文件夹,点击 “保存”,重启 MATLAB 生效。MATLAB R2024a 的安装与激活是开启 MATLAB 学习的第一步,也是构建稳定学习环境的基础。本文从安装前准备、分步操作、验证测试、问题解决到环境优化,完整覆盖了新手所需的所有知识点 —— 核心要点在于:确认系统兼容、使用合法授权、选择纯英文安装路径、完成功能验证。

unber的博客 596

2024年Web前端最全阿里大佬把近20年的DBA经验编写成了这份SQL高效优化笔记,阿里P7大佬手把手教你

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】世界上只有一种真正的英雄主义就是在认清生活真相之后仍然热爱它需要获取的小·伙伴可以直接添加小助手微信:Mxy98811即可免费获取引入篇SQL案例部分原理篇SQL篇实践篇总结函数式编程其实是一种编程思想,它追求更细的粒度,将应用拆分成一组组极小的单元函数,组合调用操作数据流;它提倡着 纯函数 / 函数复合 / 数据不可变, 谨慎对待函数内的 状态共享 / 依赖外部 / 副作用;

2401_84434237的博客 509

SOI LDMOS器件的Sentaurus TCAD建模与关键电学特性仿真研究

本文研究了SOI LDMOS器件的TCAD建模与电学特性仿真。通过Sentaurus TCAD平台建立了单RESURF结构的SOI LDMOS模型,详细阐述了器件结构原理和RESURF耐压机制。研究采用SDE进行几何定义和掺杂配置,在Sentaurus Device中构建了完整的物理模型体系,包括迁移率、复合和碰撞电离模型。通过系统仿真提取了器件的转移特性、输出特性和击穿特性等关键参数,分析了各参数对性能的影响规律。研究结果为功率半导体器件的仿真建模提供了规范化参考,有助于优化SOI LDMOS的性能设计。

huanghm88的专栏 134

黑猫带你学UFS协议第13篇:UFS初始化详解(Boot Operation)

本文详细解析了UFS设备的初始化过程,包括部分初始化、加载启动代码(可选)和初始化完成三个阶段。重点介绍了如何通过设备描述符和逻辑单元描述符配置引导特性,以及如何从UFS设备加载启动代码。内容适用于嵌入式硬件和存储领域的开发者。

黑猫奥利奥的博客 3554

android httpClient 支持HTTPS的访问方式

项目中Android https请求地址遇到了这个异常(无终端认证): javax.net.ssl.SSLPeerUnverifiedException: No peer certificate 是SSL协议中没有终端认证。 没有遇到过的问题,于是无奈的去找度娘。。。。。。。 看了不少大神的博客后得到的解决方案如下: /** * Post请求连接Https服务 * ...

我的专栏 1311

Vue3 - Element Plus上传组件el-upload上传多个文件时,让on-change监听事件仅执行一次并获取最终文件列表方法(开启多选文件并手动上传,拿到文件列表统一循环调用接口上传)

vue3,elementplus,Upload上传,el-upload,文件上传组件,上传组件on-change里执行多次,取消自动上传后change重复执行问题,upload上传多个文件后导致on-change执行多次拿不到最终文件列表,Element-plus的upload组件on-change不断执行怎么办,上传多个文件多次执行调用,上传多个文件时如何只执行一次on-change方法拿到最终的文件列表,vue3elementplus上传组件开启多个上传后导致change方法执行好几次,仅调用一

🏆 前端领域优质创作者 1万+
上一篇: android中图片的处理(绘制圆形,圆角||缩略图)
下一篇: Android蓝牙自动配对工具类,亲测好使!!!
Allen-华
博客等级 码龄11年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值