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
avecfor
boucles pour rendre le code plus lisible
Vous devez vous connecter pour publier un commentaire.
Voir cette question:
"La HttpURLConnection.getErrorStream méthode retourne un InputStream qui peut être utilisé pour récupérer des données à partir des conditions d'erreur (comme un 404), selon la documentation javadoc."
Vous avez besoin de vérifier le statut http à l'aide de
getResponseCode()
à décider si vous devez utilisergetInputStream()
ougetErrorStream()
. Dans ce cas, vous avez besoin de lire le flux d'erreur.