我正在我的项目上使用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
的子域中工作。
答案 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>