不允许使用明文HTTP流量到192.168.1.2

时间:2018-05-14 16:08:12

标签: http android-studio https

String login_url = "http://192.168.1.2/login.php";   
URL url = new URL(login_url");
HttpURLConnection httpURLConnection = 
(HttpURLConnection)url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
....

我想向wampserver发送请求,但Android Studio会在标题上停止执行该消息。怎么了?我刚刚将Android Studio更新到最新版本(P)。这不是错误,我可以正常工作......我该如何解决这个问题?

1 个答案:

答案 0 :(得分:8)

根据Network security configuration -

  

从Android 9.0(API级别28)开始,明确支持   默认情况下已禁用。

另请查看 - https://koz.io/android-m-and-the-war-on-cleartext-traffic/

选项1 -

创建文件res / xml / network_security_config.xml -

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
    </domain-config>
</network-security-config>

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
        ...
    </application>
</manifest>

选项2 -

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

同样,@david.s' answer指出android:targetSandboxVersion也可能是一个问题 -

根据Manifest Docs -

  

android:targetSandboxVersion

     

此应用使用的目标沙箱。沙盒版本越高   数量越多,安全级别越高。其默认值为1;您   也可以将其设置为2.将此属性设置为2将应用程序切换为   一个不同的SELinux沙箱。以下限制适用于a   2级沙箱:

     
      
  • Network Security Config中的默认值usesCleartextTraffic为false。
  •   
  • 不允许共享Uid。
  •   

所以选项3 -

如果android:targetSandboxVersion中有<manifest>,请将其缩小为1

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>