android - 安卓; 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();
解决方案
为了能够执行 HTTPS 连接,必须存在 SSL 证书和传输配置,否则您的设备将不知道如何加密,更重要的是信任另一端。
简而言之,请查看Network Security Configuration官方文档以了解这一点及其含义。
如果您现在只关心调试,那么您还可以在同一页面中找到有关如何“绕过”调试构建的信息。
简而言之(我引用):
在调试通过 HTTPS 连接的应用程序时,您可能希望连接到本地开发服务器,该服务器没有生产服务器的 SSL 证书。
- 添加一个文件
res/xml/network_security_config.xml
(创建它) - 粘贴类似这样的内容(但请阅读它的含义并理解它,如果您不学习这些内容,您的应用程序和用户信息的安全性将面临风险):
<?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>
推荐阅读
- javascript - 如何在 Vue.js 中使用 Javascript 生成器?
- coq - How to define an inductive type mutually recursive with a function?
- machine-learning - word2vec,使用文档正文或关键字作为训练语料库
- r - R Studio - 删除重复并且一列大于另一列
- postgresql - Postgres - DBLINK - 它是如何工作的?
- c - 发布时出现分段错误但调试时很好?cs50数组凯撒赋值
- uitableview - 如何在核心数据上创建可观察对象并将其绑定到 tableView
- javascript - 为网页抓取编写 UI
- c++ - Qt 中的 FlowLayout 和模型视图模式
- scala - 定义独立 sbt 任务的启动顺序