使用 OkHttp3 请求后端时出现错误代码 400,Chrome 返回 200 OK

时间:2021-06-27 22:44:52

标签: 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-Authenticate: Basic realm="My realm"。

这里有什么问题?我应该在标题中向我的 android 请求添加什么?

2 个答案:

答案 0 :(得分:0)

很难说是什么问题。但您可以比较原始请求(标头 + 响应正文)。

您可以通过 Fiddler/Charles 或其他软件从您的手机捕获流量,并查看原始请求之间的差异(一个是从您的手机发出的,另一个是通过 Chrome 发出的)。也许您忘记了请求正文中的某些标头或参数或其他内容。

如何在设备上启动 fiddler: https://www.telerik.com/blogs/how-to-capture-android-traffic-with-fiddler

答案 1 :(得分:0)

供将来参考。问题是缺少接受标头。

 val requestWithUserAgent = originalRequest.newBuilder()
   .addHeader(AUTHORIZATION, credentials)
   .addHeader("Accept", "application/json")
   .build()

添加它将解决问题。