解决okhttp无法调用HTTP协议的接口问题

news/2025/2/22 19:10:43
http://www.w3.org/2000/svg" style="display: none;">

之前我在Java Web项目中,网络请求用的是http>okhttp,今天发现很多网络请求都不通,通过日志发现,发现使用okhhtp出现了错误。

请求失败:CLEARTEXT communication not enabled for client

我的http>okhttp版本为

<dependency>
    <groupId>com.squareup.http>okhttp3</groupId>
    <artifactId>http>okhttp</artifactId>
    <version>3.10.0</version>
</dependency>

然后我在网上查询问题,网上给出的回答是:

这个问题通常是由于网络请求使用了非加密的明文传输而引起的。默认情况下,Android 9.0(API级别28)之后的版本禁止应用程序使用明文HTTP进行网络通信,以提高数据的安全性。如果应用程序尝试使用不安全的明文通信,就会出现"CLEARTEXT communication not enabled for client"的错误。

为了解决这个问题,你可以通过以下几种方法之一来启用明文通信:

  • 升级到使用加密的HTTPS通信,这是推荐的方法。你可以使用自签名证书或从有效的证书颁发机构(CA)获取的证书来配置HTTPS。
  • 在应用程序的AndroidManifest.xml文件中添加以下代码来启用明文通信:
    <application

    android:usesCleartextTraffic=“true”
    …>

    </application>

但是我是Java WEB的项目,不是Android项目,不能用这种方式。

后面创建okHttpClient对象时修改了一下配置就解决问题了

if (okHttpClient == null) {
            synchronized (OkHttpUtils.class) {
                if (okHttpClient == null) {
                    TrustManager[] trustManagers = buildTrustManagers();
                    okHttpClient = new OkHttpClient.Builder()
                            .connectTimeout(5, TimeUnit.MINUTES)
                            .writeTimeout(20, TimeUnit.MINUTES)
                            .readTimeout(20, TimeUnit.MINUTES)
                            .protocols(Arrays.asList(Protocol.HTTP_1_1,Protocol.HTTP_2))
                            .sslSocketFactory(createSSLSocketFactory(trustManagers), (X509TrustManager) trustManagers[0])
                            .hostnameVerifier((hostName, session) -> true)
                            .retryOnConnectionFailure(true)
                            //加入了本段代码,即可解决问题
                            .connectionSpecs(Arrays.asList(
                                    ConnectionSpec.MODERN_TLS,
                                    ConnectionSpec.COMPATIBLE_TLS,
                                    ConnectionSpec.CLEARTEXT))
                            .build();
                    addHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
                }
            }
        }
    }

我新加了这段配置

.connectionSpecs(Arrays.asList(
		        ConnectionSpec.MODERN_TLS,
		        ConnectionSpec.COMPATIBLE_TLS,
		        ConnectionSpec.CLEARTEXT))

目前能顺利调用HTTP协议的接口了。


http://www.niftyadmin.cn/n/5443653.html

相关文章

QML TextField 默认无法鼠标选中内容

1.import QtQuick.Controls 2.0 后的TextField默认无法选中内容如下图&#xff1a; 2.增加属性设置 selectByMouse: true 可以选中内容了 TextField{ selectByMouse: true text:"1234567890987654321" } 效果如下:

O2OA(翱途)开发平台前端安全配置建议(一)

O2OA开发平台是一个集成了多种功能的开发环境&#xff0c;前端安全在其中显得尤为重要。前端是用户与平台交互的直接界面&#xff0c;任何安全漏洞都可能被恶意用户利用&#xff0c;导致用户数据泄露、非法操作或系统被攻击。因此&#xff0c;前端安全是确保整个系统安全的第一…

1-Flume中agent的source

Flume&#xff08;1.11.0版本&#xff09; 简介 概述 Flume本身是由Cloudera公司开发的后来贡献给了Apache的一套针对日志数据进行收集(collecting)、汇聚(aggregating)和传输(moving)的机制 Flume本身提供了简单且灵活的结构来完成日志数据的传输 Flume有两大版本&#x…

nginx配置详解+nginx_lua模块的使用

nginx基本配置详解 目录 nginx基本配置详解 nginx_lua模块使用方式 openresty介绍与安装 lua基本语法使用 全局配置&#xff1a; user&#xff1a;指定Nginx主进程运行的用户。在下方示例中&#xff0c;Nginx将以root用户身份运行。worker_processes&#xff1a;指定Ngi…

中文编程入门(Lua5.4.6中文版)第十章 Lua 表格 参考模拟人牛游戏

在《模拟人牛&#xff1a;编程冒险》中&#xff0c;你扮演一位程序大神&#xff0c;在虚拟的代码世界里构建和操作神奇的数据结构——Table。这种强大的结构就像是你的魔法书&#xff0c;用来存储和组织各种类型的信息&#xff0c;如角色属性、物品清单&#xff0c;甚至是整个城…

数据结构(二)队列和栈

Java提供了java.util.Stack类来表示栈数据结构。Stack类是Vector类的子类&#xff0c;它实现了一个标准的后进先出&#xff08;LIFO&#xff09;栈。同样也提供了Queue接口&#xff0c;表示一系列按照特定顺序排列的元素&#xff0c;其中最早添加的元素将最先被移除&#xff08…

Python使用PaddleSpeech实现语音识别(ASR)、语音合成(TTS)

目录 安装 语音识别 补全标点 语音合成 参考 PaddleSpeech是百度飞桨开发的语音工具 安装 注意&#xff0c;PaddleSpeech不支持过高版本的Python&#xff0c;因为在高版本的Python中&#xff0c;飞桨不再提供paddle.fluid API。这里面我用的是Python3.7 需要通过3个pip…

Vue reactive函数的使用

let searchForm reactive({}); let data reactive({ isAdmin: true, isshowAccount: true }); reactive 是什么&#xff1f; reactive 是 Vue 3 Composition API 中的一个函数&#xff0c;用于创建一个包含响应式数据的对象。在 Vue 2.x 中&#xff0c;我们通常使用 data 选项…