Код ошибки 400 при запросе бэкенда с помощью OkHttp3 Chrome возвращает 200 ОК

#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()
 

Добавление этого исправит проблему.