Em Java, este código lança uma exceção quando o resultado HTTP é o intervalo 404:
URL url = new URL("http://stackoverflow.com/asdf404notfound");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.getInputStream(); // throws!
No meu caso, sei que o conteúdo é 404, mas mesmo assim gostaria de ler o corpo da resposta.
(No meu caso real, o código de resposta é 403, mas o corpo da resposta explica o motivo da rejeição e gostaria de exibi-lo ao usuário.)
Como posso acessar o corpo da resposta?
java
http
httpurlconnection
Dan Fabulich
fonte
fonte
Respostas:
Aqui está o relatório do bug (feche, não corrigirá, não é um bug).
O conselho deles é codificar assim:
fonte
httpConn.getResponseCode() >= 400
(e sua solução tem um erro, invertendo os fluxos de entrada para usar)É o mesmo problema que eu estava tendo:
HttpUrlConnection
retornaFileNotFoundException
se você tentar ler ogetInputStream()
da conexão.Em vez disso, você deve usar
getErrorStream()
quando o código de status for superior a 400.Mais do que isso, tenha cuidado, pois não é apenas 200 como o código de status de sucesso, mesmo 201, 204, etc. são frequentemente usados como status de sucesso.
Aqui está um exemplo de como fui gerenciá-lo
Dessa forma, você poderá obter a resposta necessária em casos de sucesso e de erro.
Espero que isto ajude!
fonte
Em .Net você tem a propriedade Response da WebException que dá acesso ao stream ON uma exceção. Então eu acho que esta é uma boa maneira de Java, ...
Ou uma implementação que usei. (Pode precisar de alterações de codificação ou outras coisas. Funciona no ambiente atual.)
fonte
Eu sei que isso não responde à pergunta diretamente, mas em vez de usar a biblioteca de conexão HTTP fornecida pela Sun, você pode dar uma olhada em Commons HttpClient , que (em minha opinião) tem uma API muito mais fácil de trabalhar.
fonte
Primeiro verifique o código de resposta e depois use
HttpURLConnection.getErrorStream()
fonte
fonte
if (httpConn.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
Meu código em execução.
fonte
Como ler o corpo da resposta 404 em java:
Use a biblioteca Apache - https://hc.apache.org/httpcomponents-client-4.5.x/httpclient/apidocs/
ou Java 11 - https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpClient.html
O snippet fornecido abaixo usa Apache:
fonte