使用 Retrofit 和 Back4app Api Rest 出现 401 错误

问题描述 投票:0回答:2

我在 back4app 中有一个应用程序,我正在尝试通过改造获取数据,但收到 401 响应。

我添加这些标头参数

  • X-解析-应用程序-Id
  • X-解析-REST-API-密钥
  • 内容类型

我尝试添加 X-Parse-Session-Token 但有相同的响应。 当我通过邮递员检查时,我得到了正确的数据

这是我的代码:

API服务

@GET("users")
fun getPlayers(): Call<PlayersResponse>

玩家反应:

class PlayersResponse {

    @SerializedName("results")
    var players: List<PlayerResponse>? = null

    inner class PlayerResponse {

        private val objectId: String? = null

        private val username: String? = null
    }
}

改造服务

fun <S> createService(serviceClass: Class<S>): S {
    val httpClient = OkHttpClient.Builder()
    val builder = Retrofit.Builder().addConverterFactory(GsonConverterFactory.create())
    httpClient.addInterceptor { chain -> return@addInterceptor addHeaderParams(chain) }
    httpClient.connectTimeout(HTTP_TIMEOUT_SECS.toLong(), TimeUnit.SECONDS)
    httpClient.readTimeout(HTTP_TIMEOUT_SECS.toLong(), TimeUnit.SECONDS)
    val retrofit: Retrofit = builder
        .baseUrl(URL_BACKEND)
        .client(httpClient.build())
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .build()

    return retrofit.create(serviceClass)
}

private fun addHeaderParams(chain: Interceptor.Chain): Response {
    val request = chain.request().newBuilder()
    val originalHttpUrl = chain.request().url
    val newUrl = originalHttpUrl.newBuilder().apply {
        addQueryParameter(HEADER_APP_ID, APP_ID)
        addQueryParameter(HEADER_API_KEY, API_KEY)
        addQueryParameter(HEADER_CONTENT_TYPE, CONTENT_TYPE)
    }.build()
    request.url(newUrl)

    return chain.proceed(request.build())
}

获取玩家功能

override suspend fun getPlayers(mapper: PlayersMapper): DataResult<List<Player>> {

    val client: ApiService = RetrofitService.createService(ApiService::class.java)
    val players = withContext(Dispatchers.IO) { client.getPlayers().execute() }
    return if (players.isSuccessful) {
        DataResult.Success(mapper.map(players.body()))
    } else {
        DataResult.Error(Exception(players.message()))
    }
}
android kotlin parse-platform retrofit back4app
2个回答
0
投票

我将 addHeadersParams 更改为该函数,现在它可以工作了

private fun addHeaderParams(chain: Interceptor.Chain): Response {
    val request = chain.request().newBuilder().apply {
        addHeader(HEADER_APP_ID, APP_ID)
        addHeader(HEADER_API_KEY, API_KEY)
        addHeader(HEADER_CONTENT_TYPE, CONTENT_TYPE)
    }
    return chain.proceed(request.build())
}

0
投票

在 Back4App 上我们需要使用 POST。

@POST("users")
fun getPlayers(): Call<PlayersResponse>
© www.soinside.com 2019 - 2024. All rights reserved.