有一個第三方網站使用HTTPS,並且在登錄時起始頁執行POST。我在瀏覽器中檢查了POST請求,然後我可以用Fiddler的作曲家手動創建請求。因此,根據憑證,我可以成功或不成功使用Fiddler登錄。返回碼始終爲302,它們分別與用戶管理頁面的重定向(標題「位置」)或登錄失敗頁面一起出現。Retrofit的POST請求以意想不到的方式工作
但是,當我使用Retrofit庫創建該請求時,它不起作用。我得到的響應代碼爲200,在這種情況下不會被視爲成功。
爲了檢查來自Retrospect的POST請求,我將它指向了Fiddler(http://localhost:8888)而不是第三方URL。如果我將該請求複製到作曲家,並將URL調整爲第三方URL,則該請求確實有效。也就是說,我無法找到由Retrofit構建的請求有任何問題。
有沒有人有一個想法是什麼可能是錯的?
我的代碼寫在科特林,但應該是很容易理解,如果你知道的Java:
import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.http.*
interface MyApi {
@POST("<relative login url>")
@FormUrlEncoded
@Headers(
//...
)
fun login(
@Field("username") username: String,
@Field("password") password: String
) : Call<ResponseBody>;
}
fun main(args: Array<String>) {
val baseUrl = "https://<url>"
val retrofit = Retrofit.Builder().baseUrl(baseUrl).build()
val myApi = retrofit.create(MyApi::class.java)
val code = myApi.login("<username>", "<password>").execute().code()
println(code)
}
我猜你正在使用改裝用''OkHttp''默認情況下它在具有' 'followRedirects''設置爲true,所以你永遠不會得到302,因爲重定向是默認的。一個簡單的方法來檢查這是通過設置「followRedirect」屬性爲false來初始化自定義「OkHttpClient」的改造。如果我沒有記錯的話,有2個,如果我沒有記錯的話,也有一個是Https請求。試試看,讓我們知道。 – Fred
工程就像一個魅力!你可以發表你的評論作爲答案,我會接受它是正確的。 –