首页 > 解决方案 > retrofit2.adapter.rxjava2.httpexception http 403 禁止为什么这个错误发生在 kotlin android

问题描述

我无法连接到服务器,无法从服务器发送或接收数据,这个错误困扰了我很长时间。

这是我的kotlin项目中出现错误的图片

在此处输入图像描述

我的改造代码是

package com.epaysave.network

import com.epaysave.BuildConfig
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory

open class BaseRetrofit : BaseOKHttp() {

    private fun gsonBuilder(): Gson {
        return GsonBuilder()
            .setLenient()
            .create()
    }

    fun buildRetrofit(): Retrofit {
        return Retrofit.Builder()

            .client(provideOKHttpClient())
            .addConverterFactory(GsonConverterFactory.create(gsonBuilder()))
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .baseUrl(BuildConfig.base_url)
            .build()
    }
}

然后我的HTTP代码是

package com.epaysave.network

import com.epaysave.BuildConfig
import okhttp3.*
import okhttp3.logging.HttpLoggingInterceptor
import java.io.IOException
import java.util.concurrent.TimeUnit

open class BaseOKHttp {
    companion object {
        const val NETWORK_CONNECTION_TIMEOUT = 1L
        const val NETWORK_READ_TIMEOUT = 30L
        const val NETWORK_WRITE_TIMEOUT = 15L
    }

    fun provideOKHttpClient(): OkHttpClient {
        val okHttpClient = OkHttpClient.Builder()
        okHttpClient
            .connectTimeout(NETWORK_CONNECTION_TIMEOUT, TimeUnit.MINUTES)
            .readTimeout(NETWORK_READ_TIMEOUT, TimeUnit.SECONDS)
            .writeTimeout(NETWORK_WRITE_TIMEOUT, TimeUnit.SECONDS)

        if (BuildConfig.DEBUG)
            okHttpClient.addInterceptor(provideHttpLoggingInterceptor())
        okHttpClient.addInterceptor(BasicAuthInterceptor(
                "superadmin@epaysave.com", "supadm_12345")).build();
        return okHttpClient.build()
    }

    fun provideHeaderInterceptor(headers: HashMap<String, String>): Interceptor {
        return Interceptor { chain ->
            val request = chain.request()?.newBuilder()
            headers.forEach {
                request?.addHeader(it.key, it.value)
            }
            chain.proceed(request!!.build())
        }

    }

    private fun provideHttpLoggingInterceptor(): HttpLoggingInterceptor {
        val logging = HttpLoggingInterceptor()
        logging.level = HttpLoggingInterceptor.Level.BODY
        return logging
    }
}

internal class BasicAuthInterceptor(userName: String, password: String) : Interceptor {

    private val credentials: String = Credentials.basic(userName, password)

    @Throws(IOException::class)
    override fun intercept(chain: Interceptor.Chain): Response {
        val request = chain.request()
        val authenticateRequest = request.newBuilder().addHeader("Content-Type", "application/json; charset=utf-8")
            .addHeader("Accept", "application/json").addHeader("Authorization", credentials).build()
        return chain.proceed(authenticateRequest)
    }
}

我在清除 android 中的 retrofit2 和 OKHTTP3 中的 kotlin 应用程序时遇到问题。如何正确执行?

标签: androidkotlinretrofit2okhttpkotlin-android-extensions

解决方案


推荐阅读