我遇到了需要连接到后端并获得响应的情况。在发送请求之前,我设置了一个拦截器来输入我的凭据。
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 请求添加什么?
答案 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()
添加它将解决问题。