#android #kotlin #okhttp #http-status-code-401 #http-status-code-400
Вопрос:
Я нахожусь в ситуации, когда мне нужно подключиться к своему бэкэнду и получить ответ. Я настроил перехватчик, чтобы ввести свои учетные данные перед отправкой запроса.
val credential: String = Credentials.basic("user123", "myPassword")
override fun intercept(chain: Interceptor.Chain): Response {
val originalRequest = chain.request()
val requestWithUserAgent = originalRequest.newBuilder()
.addHeader(AUTHORIZATION, credentials)
.build()
return chain.proceed(requestWithUserAgent)
}
private const val AUTHORIZATION = "Authorization"
В этом случае я получаю код ошибки 400 и никакого тела. Однако, когда я пытаюсь сделать то же самое с веб-навигатором (Chrome), я авторизован, у меня есть доступ, и я вижу ответ.
Любая другая форма, в которую я пытался войти (Base64) или что-то еще, возвращает код ошибки 401. И в заголовке : Www-Аутентификация: Базовая область=»Моя область».
В чем здесь может быть проблема ? Что я должен добавить в свой запрос Android в заголовке ?
Ответ №1:
Трудно сказать, в чем проблема. Но вы можете сравнить необработанные запросы(заголовки тело ответа).
Вы можете перехватывать трафик со своего телефона с помощью Fiddler/Charles или другого программного обеспечения и видеть различия между необработанными запросами(один из них сделан с вашего телефона, другой-через Chrome). Возможно, вы забыли о каком-то заголовке или параметре в теле запроса или о чем-то другом.
Как запустить fiddler на устройстве: https://www.telerik.com/blogs/how-to-capture-android-traffic-with-fiddler
Комментарии:
1. Спасибо, ваш комментарий помог найти способ, я опубликовал свой ответ.
Ответ №2:
Для дальнейшего использования. Проблема заключалась в отсутствующем заголовке «Принять».
val requestWithUserAgent = originalRequest.newBuilder()
.addHeader(AUTHORIZATION, credentials)
.addHeader("Accept", "application/json")
.build()
Добавление этого исправит проблему.