客户端未启用改造CLEARTEXT通信

时间:2019-02-28 16:03:21

标签: android retrofit

我正在我的项目上使用Retrofit库,但是Retrofit似乎阻止了非https请求。 我尝试通过在Manifest.xml

中添加application标签
android:usesCleartextTraffic="true"

但是没有用,我还尝试了另一种解决方案,方法是在res/xml下添加安全确认文件:

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">http://my subdomain/</domain>
    </domain-config>
</network-security-config>

并将其链接到Manifest.xml的application标签中:

android:networkSecurityConfig="@xml/network_security_config"

两种解决方案均无效。 我如何避免此错误?

请注意:我通过https请求进行测试时,我的代码工作正常,出于测试目的,我们正在使用http的子域中工作。

2 个答案:

答案 0 :(得分:1)

只是有这个确切的问题,不确定您的解决方案是否相同。但就我而言,我使用okhttp3作为http客户端,并且在构建客户端时,我必须像这样指定连接规范:

val specs = listOf(ConnectionSpec.CLEARTEXT, ConnectionSpec.MODERN_TLS)

client.connectionSpecs(specs)

以前,我只设置MODERN_TLS,所以为了允许我的库接受HTTP连接,我必须添加CLEARTEXT规范

答案 1 :(得分:0)

您可以在不指定http://的情况下包含网址。网站http://mywebsite.com和ip地址http://192.168.1.1的示例,您可以这样编写:

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">mywebsite.com</domain>
        <domain includeSubdomains="true">192.168.1.1</domain>
    </domain-config>
</network-security-config>