Android java 用okhttputil请求网络接口时,走https的网址会报:Read error: ssl=0x79a6bee848: Failure in SSL librar...

log.png

以下是我问GPT得到的回答:
————————————GPT回答分割线————开始———————————————
当使用 OkHttpUtil 请求 HTTPS 网址时,遇到 "Failure in SSL library, usually a protocol error" 错误,可能是由于以下原因导致的:

  1. 证书问题:HTTPS 网址使用了自签名证书或无效证书,导致 SSL 验证失败。

解决方法:可以尝试忽略 SSL 验证,但这会带来安全风险,不推荐在正式环境中使用。可以使用 OkHttpClientOkHttpClient.Builder 设置 TrustAllCerts 来实现忽略 SSL 验证,示例如下:

OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.sslSocketFactory(createTrustAllSocketFactory(), new TrustAllCerts());
OkHttpClient client = builder.build();

// 创建 OkHttpUtil 实例并使用自定义的 OkHttpClient
OkHttpUtil.init(client);

请注意,createTrustAllSocketFactory()TrustAllCerts 是自定义的类,用于忽略 SSL 验证,请确保其正确实现。

  1. 协议版本问题:可能是服务器端与客户端之间的协议版本不兼容。

解决方法:尝试指定较低版本的协议进行连接。可以使用 OkHttpClient.Builderprotocols() 方法来设置支持的协议版本,示例如下:

OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.protocols(Arrays.asList(Protocol.HTTP_1_1));
OkHttpClient client = builder.build();

// 创建 OkHttpUtil 实例并使用自定义的 OkHttpClient
OkHttpUtil.init(client);

在示例中,我们指定了仅支持 HTTP/1.1 协议。

  1. 服务器配置问题:可能是服务器端的 SSL 配置有问题,例如未正确配置证书或密码等。

解决方法:请与服务器管理员或开发人员联系,确保服务器端的 SSL 配置正确。

请注意,以上解决方法中的示例代码是基于 OkHttpUtil 的使用。如果你使用的是其他 HTTP 请求库或自己封装的网络请求工具,请根据具体的库和实现方式,进行相应的调整和处理。

————————————GPT回答分割线————结束———————————————

而我在实际中遇到这个问题的时候,经过询问后端同事得知他用的版本是:'com.squareup.okhttp3:okhttp:3.8.1' ,而我本端用的是'com.squareup.okhttp3:okhttp:3.3.1'的,当我把版本更新到与服务端一致时,问题得到解决。

以上为本人的开发中遇到的经历,仅作为记录,如果能给你带来帮助,那就更好了。
如果上述的办法也没有帮到你,可以看看这篇文章能不能对你有用:
/**
* OkHttp在4.4及以下不支持TLS协议的解决方法
*/
https://www.jianshu.com/p/98deba472702

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容