Rus*_*ler 11 authentication android android-volley
我正在尝试使用一些遗留代码,并在使用凌空时遇到问题.
我试图找到我们的主站点的API,它适用于一个帐户,但不适用于另一个帐户.我正在尝试弄清楚请求URL /标题中的差异以及响应中的内容,但我似乎无法在排序代码中找到将其打印到日志中的方法.
我得到的错误是
com.android.volley.NoConnectionError: java.io.IOException: No authentication challenges found
Run Code Online (Sandbox Code Playgroud)
我已经读到这可能是由于401响应,但我真的不知道这意味着什么,或者至少如何证明/测试它.我真的很困惑,它适用于一个帐户而不是另一个帐户.
网址略有不同,一个是我们的英国网站,另一个是我们的AM,但除此之外没有区别.
谢谢
发生此错误的原因是服务器发送401(未授权)但未提供"WWW-Authenticate",这是客户端下一步操作的提示."WWW-Authenticate"标题告诉客户端需要哪种认证(基本或摘要).这在无头http客户端中通常不是很有用,但这就是标准的定义方式.发生此错误是因为lib尝试解析"WWW-Authenticate"标头但不能解析.
如果您可以更改服务器可能的解决方案:
WWW-Authenticate: Basic realm="fake".这仅仅是一种解决方法而不是解决方案,但它应该可以工作并且http客户端很满意.403而不是401.它的语义不一样,通常在使用登录401时是正确的响应(请参阅此处进行详细讨论),但其足够接近.如果您无法更改服务器,可能的解决方案:
正如@ErikZ在他的帖子中写道,你可以使用try&catch
HttpURLConnection connection = ...;
try {
// Will throw IOException if server responds with 401.
connection.getResponseCode();
} catch (IOException e) {
// Will return 401, because now connection has the correct internal state.
int responsecode = connection.getResponseCode();
}
Run Code Online (Sandbox Code Playgroud)
我也在这里发布了这个:java.io.IOException:没有发现身份验证挑战
| 归档时间: |
|
| 查看次数: |
13076 次 |
| 最近记录: |