我正在尝试使用一些遗留代码,但在使用 volley 时遇到了一个问题。
我正在尝试访问我们的主站点拥有的 API,它对一个帐户工作正常,但对另一个帐户无效。我正在尝试找出请求 URL/ header 中可能存在的差异以及响应中返回的内容,但我似乎无法在 volley 代码中找到将其打印到日志的方法。
我得到的错误是
com.android.volley.NoConnectionError: java.io.IOException: No authentication challenges found
我听说这可能是由于 401 响应引起的,但我真的不知道这意味着什么,或者至少不知道如何证明/测试它。我真的很困惑它适用于一个帐户而不适用于另一个帐户。
URL 略有不同,一个是我们的英国网站,另一个是我们的 AM,但除此之外没有区别。
谢谢
最佳答案
事实上,我已经通过在服务器响应中包含 WWW-Authenticate
header 解决了这个问题。
但是,如果您添加 header WWW-Authenticate: Basic realm=""
并且您的 API 也被 Web 客户端使用,则某些 Web 浏览器会触发一个弹出窗口,要求提供基本凭据。
对我来说,正确的解决方案是使用自定义方案。如本 blog post 中所述,我在 header 响应中使用 xBasic
而不是 Basic
。
WWW-Authenticate: xBasic realm=""
有了这个 header ,不仅 Volley 可以正确解析响应,而且我还可以避免 Web 浏览器显示身份验证弹出窗口。
关于android - 截击错误未找到身份验证挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20616610/