Java 如何在Android上的HttpUrlConnection中禁用401上的WWW认证头检查?

Java 如何在Android上的HttpUrlConnection中禁用401上的WWW认证头检查?,java,android,httpurlconnection,Java,Android,Httpurlconnection,我使用的web服务在验证cookie过期时返回401,这会导致HttpUrlConnection引发以下错误: java.io.IOException: No authentication challenges found at libcore.net.http.HttpURLConnectionImpl.getAuthorizationCredentials(HttpURLConnectionImpl.java:427) at libcore.net.http.HttpURLC

我使用的web服务在验证cookie过期时返回401,这会导致HttpUrlConnection引发以下错误:

java.io.IOException: No authentication challenges found
    at libcore.net.http.HttpURLConnectionImpl.getAuthorizationCredentials(HttpURLConnectionImpl.java:427)
    at libcore.net.http.HttpURLConnectionImpl.processAuthHeader(HttpURLConnectionImpl.java:407)
    at libcore.net.http.HttpURLConnectionImpl.processResponseHeaders(HttpURLConnectionImpl.java:356)
    at ...

我知道这是因为服务器没有返回WWW-Authenticate头,但这超出了我的控制范围。很高兴HttpUrlConnection为我做了这项检查,但这是真实的世界,我们并不总是能够使用完全符合HTTP规范的服务器。由于其他代码依赖性,我无法离开HttpUrlConnection,那么,如何禁用检查,以便实际使用响应?

您可以尝试捕获错误

try{
     //code that causes error
}
catch(IOException ex){
    if(ex.getMessage().equals("No authentication challenges found")){
        //handle error
    }
}

我这样做是作为一个临时黑客,但它看起来真的很脆弱,理论上我不能得到403的相同异常吗?如果需要区分响应代码,可以使用HttpURLConnection的getResponseCode()函数来确定响应代码。实际上我不能,因为这是在这些情况下抛出异常的方法。我想这会让我学到如何剪断堆栈跟踪…你能粘贴你的代码让我们看看它有什么问题吗?我有同样的问题,当我得到401时,我期望json结果,即使它是401,但在这种情况下,当我开始读取输入流时,它会抛出IOException。