Eu sei que costumava haver uma maneira de obtê-lo com o apache commons, conforme documentado aqui: http://hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/HttpMethod.html e um exemplo aqui:
http://www.kodejava.org/examples/416.html
mas acredito que isso foi preterido. Existe alguma outra maneira de fazer uma solicitação http get em java e obter o corpo da resposta como uma string e não um fluxo?
java
apache-httpclient-4.x
apache-commons
Dinamarquês94
fonte
fonte
Respostas:
Toda biblioteca em que consigo pensar retorna um fluxo. Você pode usar
IOUtils.toString()
a partir de Apache Commons IO para ler umInputStream
para umString
em uma chamada de método. Por exemplo:Atualização: alterei o exemplo acima para usar a codificação de conteúdo da resposta, se disponível. Caso contrário, o padrão será o UTF-8 como melhor sugestão, em vez de usar o padrão do sistema local.
fonte
Content-Encoding
cabeçalho da resposta, se disponível.Aqui estão dois exemplos do meu projeto de trabalho.
Usando
EntityUtils
eHttpEntity
Usando
BasicResponseHandler
fonte
response.getEntity()
e agora está disponível comoresponseString
. se você tentar fazer um response.getEntity () novamente, ele retornaráIllegalStateException
.Aqui está um exemplo de outro projeto simples no qual eu estava trabalhando usando a biblioteca httpclient do Apache:
basta usar EntityUtils para pegar o corpo da resposta como uma String. muito simples.
fonte
Isso é relativamente simples no caso específico, mas bastante complicado no caso geral.
A resposta depende do
Content-Type
cabeçalho da resposta HTTP .Este cabeçalho contém informações sobre a carga útil e pode definir a codificação de dados textuais. Mesmo que você assuma tipos de texto , pode ser necessário inspecionar o próprio conteúdo para determinar a codificação correta dos caracteres. Por exemplo, consulte a especificação do HTML 4 para obter detalhes sobre como fazer isso para esse formato específico.
Depois que a codificação é conhecida, um InputStreamReader pode ser usado para decodificar os dados.
Essa resposta depende do servidor fazer a coisa certa - se você deseja lidar com casos em que os cabeçalhos de resposta não coincidem com o documento ou as declarações do documento não coincidem com a codificação usada, isso é outra chaleira de peixe.
fonte
Abaixo está uma maneira simples de acessar a resposta como uma String usando a biblioteca do Apache HTTP Client.
fonte
Que tal exatamente isso?
fonte
A resposta de McDowell está correta. No entanto, se você tentar outra sugestão em algumas das postagens acima.
Em seguida, ele fornecerá ilegalStateException informando que o conteúdo já foi consumido.
fonte
Também podemos usar o código abaixo para obter a resposta HTML em java
fonte
Aqui está uma maneira leve de fazer isso:
Como é claro,
responseString
contendo a resposta do site e o tipo de respostaHttpResponse
, retornado porHttpClient.execute(request)
fonte
A seguir, está o trecho de código que mostra a melhor maneira de manipular o corpo da resposta como uma String, seja uma resposta válida ou uma resposta de erro para a solicitação HTTP POST:
fonte
Você pode usar uma biblioteca de terceiros que envia a solicitação HTTP e lida com a resposta. Um dos produtos conhecidos seria o Apache commons HTTPClient: HttpClient javadoc , artefato HttpClient Maven . Há HTTPClient muito menos conhecido, mas muito mais simples (parte de uma biblioteca MgntUtils de código aberto escrita por mim): MgntUtils javadoc HttpClient HttpClient , MgntUtils , MgntUtils Github . Usando uma dessas bibliotecas, você pode enviar sua solicitação REST e receber resposta independentemente do Spring como parte de sua lógica de negócios
fonte
Se você estiver usando Jackson para desserializar o corpo da resposta, uma solução muito simples é usar em
request.getResponseBodyAsStream()
vez derequest.getResponseBodyAsString()
fonte