[Android] Demander des points de connaissance du réseau

1. La requête doit passer un objet JSON vide {}, vous pouvez définir la classe RequestBodyData comme un objet vide, comme indiqué ci-dessous :

import com.google.gson.annotations.SerializedName

data class RequestBodyData(
    @SerializedName("{}")
    val emptyObject: Any = Any()
)

L'annotation @SerializedName de la bibliothèque Gson est utilisée pour définir le nom de la propriété sur {} et définir le type de propriété sur Tout type.

2. Combien y a-t-il de façons d'ajouter head à la requête ?

1. Utilisez la méthode addHeader du client OkHttp :
val client = OkHttpClient()

val request = Request.Builder()
    .url("your-url")
    .addHeader("HeaderName", "HeaderValue")
    .build()

val response = client.newCall(request).execute()

2. Utilisez l'annotation @Headers sur la méthode d'interface Retrofit :
interface ApiService {
    
    
    @Headers("HeaderName: HeaderValue")
    @GET("your-endpoint")
    suspend fun getData(): ResponseBody // 根据接口返回类型修改
}

3. Créez un intercepteur personnalisé :
class HeaderInterceptor : Interceptor {
    
    
    override fun intercept(chain: Interceptor.Chain): Response {
    
    
        val originalRequest = chain.request()
        val modifiedRequest = originalRequest.newBuilder()
            .header("HeaderName", "HeaderValue")
            .build()
        return chain.proceed(modifiedRequest)
    }
}

val client = OkHttpClient.Builder()
    .addInterceptor(HeaderInterceptor())
    .build()

val retrofit = Retrofit.Builder()
    .baseUrl("your-base-url")
    .client(client)
    .build()

val apiService = retrofit.create(ApiService::class.java)

3. 【La communication CLEARTEXT vers 192.168.1.116 n'est pas autorisée par la politique de sécurité du réseau】Que signifie l'erreur ?

"Communication CLEARTEXT vers 192.168.1.116 non autorisée par la politique de sécurité du réseau" Cette erreur signifie que l'application tente de se connecter au serveur avec l'adresse IP 192.168.1.116 via une communication en texte clair non sécurisée, mais en raison des restrictions de la politique de sécurité du réseau, cette communication en clair est interdite. Cela se produit généralement dans les applications Android.

Android 9 (API niveau 28) et les versions supérieures désactivent par défaut les requêtes réseau pour le trafic en texte brut afin d'améliorer la sécurité des communications. Seules les connexions HTTPS cryptées ou d'autres protocoles de communication sécurisés sont autorisés.

Pour résoudre ce problème, vous pouvez suivre certaines étapes :

1. Mettez à jour votre serveur pour prendre en charge HTTPS : Il est recommandé de configurer votre serveur pour prendre en charge les connexions HTTPS. Chiffrez les communications à l'aide de certificats SSL/TLS pour plus de sécurité.

2. Ajoutez la configuration de sécurité réseau dans le fichier AndroidManifest.xml : Si vous devez communiquer avec un serveur spécifique via une connexion HTTP en texte clair et que vous avez une idée de la sécurité de la connexion, vous pouvez ajouter le contenu suivant dans AndroidManifest. xml pour contourner la stratégie de sécurité réseau :

<application
    android:usesCleartextTraffic="true"
    ...>
    ...
</application>

Veuillez noter que cela réduira la sécurité de la communication, veuillez utiliser avec prudence.

3. Utiliser un profil de sécurité réseau : la méthode préférée consiste à créer un profil de sécurité réseau et à le référencer dans le fichier AndroidManifest.xml. Créez un fichier network_security_config.xml sous le répertoire res/xml et ajoutez ce qui suit au fichier :

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            // 如果需要指定特定的证书颁发机构,请在这里添加
        </trust-anchors>
    </base-config>
</network-security-config>

Ajoutez ensuite l'attribut suivant dans la balise AndroidManifest.xml pour faire référence au profil de sécurité Web :

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

Guess you like

Origin blog.csdn.net/qq_43358469/article/details/131728020