android 请求标头为空/无法通过拦截器获取

au9on6nz  于 11个月前  发布在  Android
关注(0)|答案(1)|浏览(147)

我想看到Retrofit生成的头文件,所以我添加了一个拦截器:
由Hilt注入:

@Module
@InstallIn(SingletonComponent::class)
internal object NetworkModule {

    @Provides
    @Singleton
    fun provideRetrofit(): Retrofit =
        Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(
                OkHttpClient.Builder()
                    .cookieJar(SessionCookieJar())
                    .addInterceptor { chain ->
                        chain.request().also { request ->
                            val buffer = Buffer().also { request.body()?.writeTo(it) }
                            Log.d(TAG, "Intercepted request:")
                            Log.d(TAG, request.headers().toString())
                            Log.d(TAG, buffer.readUtf8())
                        }.let(chain::proceed)
                    }
                    .build()
            )
            .addConverterFactory(JsoupConverterFactory())
            .build()

    @Provides
    @Singleton
    fun provideApiService(retrofit: Retrofit): ApiService =
        retrofit.create(ApiService::class.java)
}

字符串
下面是调用的方法:

@FormUrlEncoded
    @POST("/alswww2.dll/{sessionObject}")
    suspend fun login(
        @Path("sessionObject") sessionObject: String,
        @FieldMap formInputs: Map<String, String>,
    ): Response<ResponseBody>


日志完美地显示了主体中的所有表单参数,但没有标题。我尝试了.toMultimap(),但标题为{}。即使Retrofit不会自动生成任何标题,我不认为,至少必须有一个由@FormUrlEncoded生成的标题,或者没有?

zf9nrax1

zf9nrax11#

我通常总是使用Logging Interceptor。它有水平标题,这可以帮助你

相关问题