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

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

我想查看Retrofit生成的标头,所以我添加了一个拦截器:

由希尔特注入:

@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不会自动生成任何header,我不认为,至少一定有
@FormUrlEncoded
生成的header,或者没有?

android kotlin retrofit2
1个回答
0
投票

我通常总是使用Logging Interceptor。它有级别标题,可以帮助您

© www.soinside.com 2019 - 2024. All rights reserved.