IOException:"收到的身份验证质询为空"(Apache Harmony/Android)

Mat*_*ias 35 java android httpurlconnection

我试图通过Android HttpURLConnection(从中导入org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection)发送GET ,并在收到响应时抛出IOException:

在doRequestInternal()中:"收到的身份验证质询为空"

这个错误意味着什么,是什么导致了这个?我正在向授权标题写OAuth参数,但我也在其他场合这样做,没有问题.

    if (connection == null) {
        connection = (HttpURLConnection) new URL(endpointUrl).openConnection();
        connection.setRequestMethod("GET");
    }

    //... do some OAuth message signing

    connection.connect();

    int statusCode = connection.getResponseCode(); // throws IOException
Run Code Online (Sandbox Code Playgroud)

Mat*_*ias 50

我发现了原因.

首先,对于所有不知道此错误意味着什么的人(我确定不是):如果服务器回复401,则抛出此异常.非常直观,考虑到它是在getResponseCode()中引发的(iow)你永远无法自己检查401s,但必须抓住这个IOException而不是......).

401的实际原因是我没有发送OAuth验证程序代码.

  • 我刚刚经历过这个,发现原因是我手机上的系统时间落后了两天. (4认同)

小智 13

也许对某人有用......

此异常仅表示格式错误的答案标题:未找到"WWW-Authenticate"标题.此外,不支持使用401代码的分块答案,因此您需要"Content-Length"标题(可以为零).

  • 客户端需要发送"授权"标头,如果服务器不喜欢凭据,则需要发送回"WWW-Authenticate".在我的情况下,它是我们的服务器,它只在'Authorization`标头丢失时才发送`WWW-Authenticate`.为了修复主题中的错误,我们在服务器端进行了更改,以便在授权失败时发送`WWW-Authenticate`. (4认同)