如何修复“不允许明文 HTTP 流量到 x”的问题

Rey*_*ard 5 java httpurlconnection android-studio

我正在尝试向 http 服务器发出 post 请求,但是当我尝试获取输入流时出现错误 java.io.IOException: Cleartext HTTP traffic to x not permitted

我已经尝试放入android:usesCleartextTraffic="true"我的清单,以及进行网络安全配置并将 android:targetSandboxVersion 设置为 1

app/src/main/res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Server adress</domain>
    </domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

应用程序/src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.packagename"
    android:targetSandboxVersion="1">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"
        android:networkSecurityConfig="@xml/network_security_config"
        >
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
Run Code Online (Sandbox Code Playgroud)

Logcat 输出

D/NetworkSecurityConfig: Using Network Security Config from resource network_security_config debugBuild: true
W/System.err: java.io.IOException: Cleartext HTTP traffic to x not permitted
W/System.err:     at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:124) 
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:462)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248)
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激

小智 6

尝试仅使用

android:usesCleartextTraffic="true"
Run Code Online (Sandbox Code Playgroud)

删除这个 2

android:targetSandboxVersion="1"
android:networkSecurityConfig="@xml/network_security_config"
Run Code Online (Sandbox Code Playgroud)

我的只是使用 android:usesCleartextTraffic="true" 在任何 API 中工作


Sum*_*ash 0

也许你犯了一个错误。这是从其他来源获得的正确格式。

 <?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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

如果你有 android:targetSandboxVersion 然后将其减少到 1

AndroidManifest.xml -

   <?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
<uses-permission android:name="android.permission.INTERNET" />
...
Run Code Online (Sandbox Code Playgroud)