Java HttpURLConnection.getInputStream mais obtenir 401 IOException

Je suis en train d'écrire un client REST pour CouchDB en Java. Le code suivant doit être tout à fait standard:

    this.httpCnt.connect();
    Map<String, String> responseHeaders = new HashMap<>();
    int i = 1;
    while (true){
        String headerKey = this.httpCnt.getHeaderFieldKey(i);
        if (headerKey == null)
            break;
        responseHeaders.put(headerKey, this.httpCnt.getHeaderField(i));
        i++;
    }
    InputStreamReader reader = new InputStreamReader(this.httpCnt.getInputStream());
    StringBuilder responseBuilder = new StringBuilder();
    char[] buffer = new char[1024];
    while(true){
        int noCharRead = reader.read(buffer);
        if (noCharRead == -1){
            reader.close();
            break;
        }
        responseBuilder.append(buffer, 0, noCharRead);
    }

Je veux tester ce qui se passerait si l'authentification échoue. Toutefois, si l'authentification échoue, lors de l'appel de getInputStream de la HttpURLConnection, je reçois directement un IOException dire les réponses du serveur 401. Je suppose que si les réponses du serveur de quelque chose, n'importe réussite ou de l'échec, il devrait être en mesure de lire ce que le serveur renvoie. Et je suis sûr que dans ce cas, le serveur retourne un peu de texte dans le corps, car si je fais un GET au serveur à l'aide de curl et l'authentification échoue, je reçois un objet JSON comme le corps de la réponse à certains messages d'erreur en elle.

Est-il de toute façon à toujours obtenir le corps de la réponse, même si 401?

  • Vous pourriez repalce la while avec for boucles pour rendre le code plus lisible