我确实遇到了Add cookies to retrofit 2 request之类的问题,但是我不知道应该放在哪里以及如何创建拦截器(如果我应该使用拦截器)。我有我的改造客户端和API来发出登录请求。
这是我的代码:
MainActivty:
fun login(username:String, password:String) {
mAPIService?.login(username, password)?.enqueue(object : Callback<String> {
override fun onResponse(call: Call<String>, response: Response<String>) {
if (response.isSuccessful()) {
showResponse(response.body().toString())
Log.e("Tag", "post submitted to API.")
val test:String?= response.headers().get("set-cookie") //with this line i can catch sesion_id
}
}
override fun onFailure(call: Call<String>, t: Throwable) {
Log.e("Tag", "Unable to submit post to API. - "+t.message)
}
})
}
fun showResponse(response: String) {
Log.e("Tag", response)
}
APIService:
interface APIService {
@FormUrlEncoded
@POST("/account/")
fun login(@Field ("login-ident") username:String,
@Field ("login-pwd") password:String): Call<String>
}
改装客户端:
object RetrofitClient {
private var retrofit: Retrofit? = null
fun getClient(baseUrl: String): Retrofit? {
if (retrofit == null) {
retrofit = Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(ScalarsConverterFactory.create())
.build()
}
return retrofit
}
}
使用此代码登录不起作用,因为我还必须在APIService内的登录函数中传递带有session_id的@Header,但是我想知道的是如何截取“响应”中标头内的session_id,我不知道认为两次执行请求是最好的方法(第一个捕获会话ID,第二个添加session_id作为标头)。建议?