如何解决使用 Retrofit 和 Back4app Api Rest 获取 401 错误
我在 back4app 中有一个应用程序,我正在尝试通过改造获取数据,但收到 401 响应。
- X-Parse-Application-Id
- X-Parse-REST-API-Key
- 内容类型
我尝试添加 X-Parse-Session-Token 但有相同的响应。 当我通过邮递员检查时,我正确地获得了数据
这是我的代码:
APIService
@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()))
}
}
解决方法
我将 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())
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。