Sto scrivendo un client REST per CouchDB in Java. Il seguente codice dovrebbe essere abbastanza standard:Java HttpURLConnection.getInputStream ma ottengo 401 IOException
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);
}
Voglio verificare cosa succede se l'autenticazione fallisce. Tuttavia, se l'autenticazione fallisce, quando si chiama getInputStream
di HttpURLConnection, ottengo direttamente una IOException che dice che le risposte del server 401. Suppongo che se il server risponde a qualcosa, indipendentemente dal successo o dall'errore, dovrebbe essere in grado di leggere qualsiasi cosa ritorni. E sono sicuro che in questo caso il server restituisce del testo nel corpo, poiché se faccio un GET
al server usando curl e l'autenticazione fallisce, ottengo un oggetto JSON come corpo della risposta con alcuni messaggi di errore.
C'è un modo per ottenere ancora il corpo risposta anche se 401?
È possibile ripetere il 'while' con i cicli' for' per rendere il codice più leggibile – user3001