如何在 android 应用程序上使用 kotlin 发送具有基本身份验证的 POST

How to send a POST with basic auth using kotlin on an android app

首先,我想提一下,我可以使用任何有助于加快或简化流程的库。

我需要向端点 (http://myserver.com/api/data/save) 发送 post 请求。 正文必须是具有以下结构的 json:

{
   "id": "ABCDE1234",
   "date": "2021-05-05",
   "name": "Jason"
}

所以,我需要提出一个 post 请求。端点需要身份验证,因此我需要合并用户名和密码。我在哪里以及如何添加它们?

此致

Where and how do I add them?

有多种方法可以将您的身份验证详细信息添加到任何 API 请求中。假设您使用 Retrofit 2, one of the ideal ways to implement this is using OkHttp Interceptors.

您需要 class 实现 Interceptor

class AuthInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        var request = chain.request()

        // Add auth details here
        if (request.header("Authentication-required") != null) {
            request = request.newBuilder()
                .addHeader("username", "username value")
                .addHeader("password", "password value")
                .build()
        }

        return chain.proceed(request)
    }
}

在您的 API 界面中,将 header 添加到需要身份验证的相应 API

@Headers("Authentication-required")
@POST("/save")
fun doSave(@Body data: PostData): Call<Status>

最后,使用 OkHttpClient 作为

构建您的改造客户端
val authClient = OkHttpClient.Builder()
    .addInterceptor(AuthInterceptor())
    .build()

val retrofit = Retrofit.Builder()
    .baseUrl(your_base_url)
    .client(authClient)
    .build()