我想看到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>
日志(log)完美地显示了正文中的所有形式参数,但没有标题.我试了.toMultimap()
次,但头球打出了{}
次.
即使Retrofit不会自动生成任何标题,我也不认为,至少必须有@FormUrlEncoded
生成的标题,或者没有?