【Android】请求网络的一些知识点

1.请求需要传递一个空的 JSON 对象 {},可以将 RequestBodyData 类定义为一个空对象,如下所示:

import com.google.gson.annotations.SerializedName

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

使用了 Gson 库的 @SerializedName 注解将属性名设置为 {},并将属性类型设置为 Any 类型。

2.给请求加上head,有几种方式?

1.使用 OkHttp 客户端的 addHeader 方法:
val client = OkHttpClient()

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

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

2.在 Retrofit 接口方法上使用 @Headers 注解:
interface ApiService {
    
    
    @Headers("HeaderName: HeaderValue")
    @GET("your-endpoint")
    suspend fun getData(): ResponseBody // 根据接口返回类型修改
}

3.创建自定义的 Interceptor:
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. 【CLEARTEXT communication to 192.168.1.116 not permitted by network security policy】 错误什么意思

“CLEARTEXT communication to 192.168.1.116 not permitted by network security policy” 这个错误意味着应用程序试图通过不安全的明文通信方式连接到 IP 地址为 192.168.1.116 的服务器,但由于网络安全策略的限制,这种明文通信是被禁止的。这通常发生在 Android 应用程序中。

Android 9(API 级别 28)及更高版本默认禁止了明文流量的网络请求,以提高通信的安全性。只允许使用加密的 HTTPS 连接或其他安全的通信协议。

要解决此问题,可以采取以下一些步骤:

1.更新服务器以支持HTTPS:建议将您的服务器配置为支持 HTTPS 连接。使用 SSL/TLS 证书来对通信进行加密,从而确保安全性。

2.在 AndroidManifest.xml 文件中添加网络安全配置:如果您必须通过明文 HTTP 连接与特定服务器通信,并且您对连接的安全性有所了解,可以在 AndroidManifest.xml 文件中添加以下内容来绕过网络安全策略:

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

请注意,这样做会降低通信的安全性,请谨慎使用。

3.使用网络安全配置文件:首选的方法是创建一个网络安全配置文件并在 AndroidManifest.xml 文件中引用它。在 res/xml 目录下创建 network_security_config.xml 文件,并将以下内容添加到该文件中:

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

然后,在 AndroidManifest.xml 文件的 标签内添加以下属性来引用网络安全配置文件:

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

猜你喜欢

转载自blog.csdn.net/qq_43358469/article/details/131728020