web-dev-qa-db-fra.com

Comment corriger le «trafic HTTP en texte clair vers x non autorisé»

J'essaie de faire une demande de publication à un serveur http, mais lorsque j'essaie d'obtenir un flux d'entrée, j'obtiens l'erreur Java.io.IOException: Cleartext HTTP traffic to x not permitted

J'ai déjà essayé de mettre Android:usesCleartextTraffic="true" dans mon manifeste, ainsi que de faire une configuration de sécurité réseau et de définir Android: targetSandboxVersion sur 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>

app/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>

Sortie 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)

Toute aide serait appréciée

2
Reynard

Si vous travaillez sur votre machine locale, assurez-vous de demander 10.0.2.2 au lieu de localhost (c'est très important)

Assurez-vous ensuite que votre fichier AndroidManfest.xml comporte les lignes suivantes:

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

<application
        ... 
        Android:networkSecurityConfig="@xml/network_security_config">

et votre fichier network_security_config.xml doit ressembler à ceci:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

ou si vous devez autoriser la demande à des domaines spécifiques, vous pouvez modifier le fichier network_security_config.xml avec:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">10.0.2.2</domain>
    </domain-config>
</network-security-config>

Les deux configurations network_security_config.xml fonctionnent pour moi. Je travaille sur mon environnement de développement local.

0
Israel Estrada

J'ai eu le même problème et je l'ai résolu en abaissant la Android à 25 dans Et, l'application fonctionne bien sur les appareils avec Android 9 et plus petit.

<uses-sdk
        Android:minSdkVersion="16"
        Android:targetSdkVersion="25" />
0
Jesus Vazquez

Ne faites pas comme ça, il peut y avoir une erreur d'exécution Pour faire la méthode la plus simple; allez à Android projet natif ici vous pouvez voir Propriétés cliquez là-bas puis prenez le fichier AssemblyInfo.cs puis éditez cette partie ci-dessous

[Assemblage: application (UsesCleartextTraffic = true)]

exemple ci-dessous mon code: -

 using System.Reflection;
    using System.Runtime.CompilerServices;

    using System.Runtime.InteropServices;

    using Android.App;

    // General Information about an Assembly is controlled through the following 
    // set of attributes. Change these attribute values to modify the information
    // associated with an Assembly.
    [Assembly: AssemblyTitle("ZATWEBO.Android")]
    [Assembly: AssemblyDescription("")]
    [Assembly: AssemblyConfiguration("")]
    [Assembly: AssemblyCompany("")]
    [Assembly: AssemblyProduct("ZATWEBO.Android")]
    [Assembly: AssemblyCopyright("Copyright ©  2014")]
    [Assembly: AssemblyTrademark("")]
    [Assembly: AssemblyCulture("")]
    [Assembly: ComVisible(false)]

    // Version information for an Assembly consists of the following four values:
    //
    //      Major Version
    //      Minor Version 
    //      Build Number
    //      Revision
    //
    // You can specify all the values or you can default the Build and Revision Numbers 
    // by using the '*' as shown below:
    // [Assembly: AssemblyVersion("1.0.*")]
    [Assembly: AssemblyVersion("1.0.0.0")]
    [Assembly: AssemblyFileVersion("1.0.0.0")]

    // Add some common permissions, these can be removed if not needed
    [Assembly: UsesPermission(Android.Manifest.Permission.Internet)]
    [Assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]
    [Assembly: Application(UsesCleartextTraffic = true)]

Remarque: cette modification nécessite uniquement Android 9 Pie ou versions supérieures

0