Android Volley - HTTP代码401- java.io.IOException的奇怪错误:未找到身份验证挑战

时间:2015-05-27 08:05:36

标签: java android android-volley

我在发送请求时遇到此错误,并使用代码401获取回复:

  

com.android.volley.NoConnectionError:java.io.IOException:未发现身份验证质询

有些人说:
发生此错误的原因是服务器发送401(未授权)但未提供“WWW-Authenticate”,这是客户端下一步操作的提示。 “WWW-Authenticate”标题告诉客户端需要哪种认证(基本或摘要)。这在无头http客户端中通常不是很有用,但这就是标准的定义方式。发生此错误是因为lib尝试解析“WWW-Authenticate”标头但不能解析。 (android - volley error No authentication challenges found

但这对我来说很奇怪,因为我不想使用WWW认证的东西,我只想获得代码401,但我总是得到例外。

如何绕过这个问题?任何建议都非常感谢。

1 个答案:

答案 0 :(得分:6)

我做了一些研究并得出结论,这是一个服务器问题,不符合惯例。 来自wiki:

  

401 Unauthorized(RFC 7235)   与403 Forbidden类似,但专门用于需要身份验证且失败或尚未提供的情况。响应必须包含WWW-Authenticate头字段,其中包含适用于所请求资源的质询。请参阅基本访问身份验证和摘要访问身份验证。

我认为解决此问题的最佳方法是通过添加标题来解决服务器问题(例如:

   WWW-Authenticate:xBasic realm =""

对我来说,我无法更改服务器,因此我必须检查错误消息以检测401错误:

if (error.getMessage().equalsIgnoreCase("java.io.IOException: No authentication challenges found")){
    showLoginError();
}

不是很优雅的解决方案,但现在可以工作。