首页 > 解决方案 > 安卓; OkHttpClient 不适用于 httpS

问题描述

目前我只使用我httpclient的 for only http requests,但现在我也想使用https。我将我的更改http URL为 ahttps URL并且我的应用程序将无法连接到该 url。

仅供参考:我可以用我的浏览器连接到https url并获得我的响应,而不是在我的应用程序本身中

任何想法可能是什么问题或我做错了什么?

OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(4, TimeUnit.SECONDS)
                .build();

        retrofit = new Retrofit.Builder()
                .baseUrl("https:xyz.com/api/")
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)
                .build();

标签: androidretrofitokhttp

解决方案


为了能够执行 HTTPS 连接,必须存在 SSL 证书和传输配置,否则您的设备将不知道如何加密,更重要的是信任另一端。

简而言之,请查看Network Security Configuration官方文档以了解这一点及其含义。

如果您现在只关心调试,那么您还可以在同一页面中找到有关如何“绕过”调试构建的信息。

简而言之(我引用):

在调试通过 HTTPS 连接的应用程序时,您可能希望连接到本地开发服务器,该服务器没有生产服务器的 SSL 证书。

  1. 添加一个文件res/xml/network_security_config.xml(创建它)
  2. 粘贴类似这样的内容(但请阅读它的含义并理解它,如果您不学习这些内容,您的应用程序和用户信息的安全性将面临风险):
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
    <debug-overrides>
        <trust-anchors>
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>


推荐阅读